标签:tee imp size 注意 运行 tuple class types 允许
class Student(object):
pass
# 绑定一个属性
s = Student()
s.name = ‘Michael‘ # 动态的给实例绑定一个属性
print(s.name)
def set_age(self, age): # 定义一个函数作为实例(java中叫成员)方法
self.age = age
# 再给Student绑定一个方法
from types import MethodType
s.set_age_new = MethodType(set_age, s) # 给实例绑定一个方法
s.set_age_new(25) # 调用实例方法
print(s.age) # 测试结果
# 但是绑定的方法,对其他的实例不起作用
s2 = Student() # 创建新实例
# AttributeError: ‘Student‘ object has no attribute ‘set_age_new‘
# s2.set_age_new(23) # 调用绑定的实例方法
# 为了给所有实例都绑定方法,可以给class绑定方法
def set_score(self, socre):
self.socre = socre
Student.set_score_new = set_score # 为class绑定方法
# 绑定后, 所有的实例都可以调用
s.set_score_new(100)
print(s.socre)
s2.set_score_new(99)
print(s2.socre)
Michael
25
100
99
__slots__
name
和age
属性,为了实现这一个目的python运行在定义class的时候定义一个特殊的变量__slots__
,来限制class实例能添加的属性class Student(object):
__slots__ = (‘name‘, ‘age‘) # 用tuple定义运行绑定的属性名称
s = Student() # 创建新的实例
s.name = ‘Michael‘ # 绑定属性name
s.age = 25 # 绑定属性age
# AttributeError: ‘Student‘ object has no attribute ‘score‘
# s.score = 99
# tips: 在定义__slots__要注意, 该属性进队当前类的实例起作用,对继承的子类是不起作用的
class GraduateStudent(Student):
pass
g = GraduateStudent()
g.score = 9999
__slots__
,子类实例运行定义的属性就是自身的__slots__
加上父类的__slots__
标签:tee imp size 注意 运行 tuple class types 允许
原文地址:https://www.cnblogs.com/codycc/p/9880449.html