廖雪峰python学习笔记【12】面向对象高级编程:__slots__ 和@property

一、使用__slots__

1. python是动态语言,允许在创建类的实例后,给实例绑定属性和方法。

    1.1. 绑定属性:obj.NewAttr = value.

    1.2 绑定方法:

        1.2.1 第一步定义一个函数:def NewMethod(self, other param):

        1.2.2 第二步导入types模块中的MethodType函数:from types import MethodType

        1.2.3 第三步赋值函数名给实例:obj.NewMethod = MethodType(NewMethod, obj)

    1.3 创建类后,允许给类动态添加属性和方法,新添加的属性和方法后,之后创建的所有实例都能访问。

2. 在定义类时,在类内部给特殊变量__slots__赋值,来限制给类实例动态绑定的属性。

    2.1 __slots__ = ('attr1', 'attr2', 'attr3')。在创建实例后,只能给实例动态绑定attr1, attr2或attr3属性。

    2.2 __slots__,父类和子类

        2.2.1 父类定义了__slots__,子类没有。则子类子类实例可以绑定任意属性。

        2.2.2 父类没有定义__slots__,子类有。则子类子类实例可以绑定任意属性。

        2.2.3 父类和子类都定义了__slots__。则子类子类实例可以绑定的属性是父类__slots__和子类__slots__的并集。

二、使用@property

1. python内置的@property装饰器负责把方法变成属性调用。可以达到对属性取值范围检查的目的。

2. @property下的方法定义的是属性的getter方法。方法名为属性名称。

3. @AttrName.setter下的方法定义的是属性AttrName的setter方法。方法名为属性名称,即AttrName。

4. 只定义@property,不定义@AttrName.setter,可以定义只读属性。

猜你喜欢

转载自blog.csdn.net/liufuchun111/article/details/80525358