python公开课第六节

时间:2022-03-23 22:15:56

_ _ slots _ _和property

  • 方法和属性的动态绑定
  • 使用_ _ slots _ _限定class实例能添加的属性
  • _ _ slots _ _仅对当前类实例其作用对继承的子类是不起作用的
import traceback
from types import MethodType
class MyClass(object):
__slots__=['name','set_name']
def set_name(self,name):
self.name=name
cls=MyClass()
cls.name='Tom'
cls.set_name=MethodType(set_name,cls)
cls.set_name('Jerry')
print(cls.name)
try:
cls.age=30
except AttributeError:
traceback.print_exc()

class ExMyClass(MyClass):
pass
exCls=ExMyClass()
exCls.age=30
print(exCls.age)
Jerry
30
Traceback (most recent call last):
File "<ipython-input-6-0f798d2025db>", line 13, in <module>
cls.age=30
AttributeError: 'MyClass' object has no attribute 'age'
  • 直接暴露属性的局限性
  • 使用get和set方法
  • 利用@property简化get/set
  • 使用@property实现只读属性
  • 装饰器与property实现
  • -