__slots__的作用

默認我們可以給class實例綁定任何屬性和方法,這就是動態語言的靈活性如果我們想要限制class的屬性怎麼辦?比如,只允許對Student實例添加name和age屬性。爲了達到限制的目的,Python允許在定義class的時候,定義一個特殊的__slots__變量,來限制該class能添加的屬性:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Student(object):
    __slots__ = ("name","age")
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def print_type(self):
        print("my name is %s,age is %s" %(self.name,self.age))

p=Student("ye",18)
p.addr='重慶市'       #新增addr屬性會報錯
p.print_type()

由於'addr'沒有被放到__slots__中,所以不能綁定addr實例屬性,試圖綁定addr將得到AttributeError的錯誤。
使用__slots__要注意,__slots__定義的屬性僅對當前類起作用,對繼承的子類是不起作用的:
除非在子類中也定義__slots__,這樣,子類允許定義的屬性就是自身的__slots__加上父類的__slots__。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章