屬性的動態(tài)綁定以及限制綁定
對于一個類所創(chuàng)造出的實力我們可以使用動態(tài)的方式進(jìn)行屬性的綁定基括。即如下:
class Human(object):
這樣的上述類沒有添加任何屬性燃少,但是可以使用動態(tài)綁定的方法:
one = Human()
one.name = "夸父" //綁定了一個name屬性
...
可以使用如上的方式綁定很多屬性他爸,那么如果我們想要限制動態(tài)綁定的一些屬性呢衍锚,比如只能綁定name和age韭山,不能夠綁定其他的屬性。想要實現(xiàn)這樣的需求就要用到如下的方式:
class Human(object):
__slots__ = ('name','age') //只能動態(tài)綁定name和age
//我們嘗試一下
>>> two = Human()
>>> two.name = 'MJ'
>>> two.age = 23
>>> two.hobby = 'Work'
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
two.hobby = 'Work'
AttributeError: 'Human' object has no attribute 'hobby'
>>>
可以很清楚的看到逝撬,當(dāng)我們想要綁定指定屬性之外的屬性時东帅,出現(xiàn)了錯誤。
slots(前后有兩個下劃線__)會不會影響類init方法中綁定的屬性
測試代碼如下:
>>> class Human(object):
__slots__ = ('name',"age")
def __init__(self,hobby):
self.hobby = hobby
>>> three = Human('work')
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
three = Human('work')
File "<pyshell#19>", line 4, in __init__
self.hobby = hobby
AttributeError: 'Human' object has no attribute 'hobby'
可以看到球拦,我們在slots總指定了"name"和"age"沒有指明"hobby"靠闭,而當(dāng)我們使用初始化方法創(chuàng)造實例對象時失敗并報錯了。因此slots會影響init方法中綁定的屬性坎炼。
注意
使用slots只會影響當(dāng)前的類愧膀,并不會影響子類。