python object對象


動態語言的對象屬性

既然都是動態語言,自然python和熟知的JavaScript很像,建一個空對象用來存放所有的數據,看看js:

var data = {};
data.name = 'CooMark';
data.age = 30;

但是在python中這樣卻不行,說好的動態屬性呢?

data = object()
data.name = 'CooMark' # AttributeError: 'object' object has no attribute 'name'

但是像下面這樣又是可以的,WTF?

class Developer(object):
    pass

data = Developer()
data.name = 'CooMark'
data.age = 30

python slots

python的__slots__設計是為了節省內存,也可以用於構造安全的類、如果一個類使用了__slots__那么它的屬性就不再自由了。

下面舉例說明:

  1. 自由屬性。
class person(object):
    def __init__(self, name, age):
        self.Name = name
        self.Age = age
    if __name__ =='__main__':
        p = person('jianglex', 100)
        p.ID = 7  # 由於沒有使用slots所以屬性是自由的,可以自由設置,就算設置前沒有聲明也沒事。
  1. __slots__設置非自由屬性
class person(object):
    __slots__=('Name','Age')

    def __init__(self,name,age):
        self.Name=name #注意,__init__的執行在__slots__之后;所以就算在__init__方法里也是不能執行self.ID=007的。
        self.Age=age
    if__name__=='__main__':
      p=person('jiangle',100)
      p.ID=7 #這里會報錯,由於我們使用了__slots__來聲明屬性,所以屬性再也不是自由的了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM