python面向对象-限制对象的属性

在之前的讲解中,python是 动态语言,可以动态给对象(实例) 绑定属性,这是动态语言的灵活性。

但有时要 限制 对象(实例)的属性,如list等内置对象,是不能绑定自定义的属性的

执行下面代码:

>>>l=[1,2,3]
>>>l.name='测试'

会报错

执行下面的代码:

>>>import datetime
>>>t=datetime.datetime.today()
>>>t.name='测试'

也会报错

__slots__类属性

定义类时,定义一个特殊的__slots__类属性,限制 该类的 实例属性(不限制 类属性)

代码:

class Student:
    __slots__=('name','age','sex')

xiaoming=Student()
xiaoming.name='小明'
#下面代码执行报错
xiaoming.money=1000

子类

当子类继承父类时,父类的__slots__属性 是否 会限制子类的实例属性?

创建CollegeStudent类,继承Student类

代码如下:

class CollegeStudent(Student):
    pass

lilei=CollegeStudent()
lilei.name='李雷'
lilei.money=1000

总结

从执行结果可知,子类 没定义 __slots__类属性,父类的__slots__属性 不会 限制子类的实例属性

子类定义__slots__类属性

class CollegeStudent(Student):
    __slots__='money'

lilei=CollegeStudent()
lilei.name='李雷'#这行代码不会报错
lilei.money=1000
#下面代码会报错
lilei.card='工商卡'

总结

子类 定义 __slots__类属性后,子类对象允许定义的属性就是 自身 的__slots__加上 父类 的__slots__


原文出处:/show_1EF2GKxOTaPk.html