python基础-OOP
给实例添加绑定方法
1 from types import MethodType 2 class Student(object): 3 pass 4 5 s = Student() 6 7 def set_age(self, age): 8 self.age = age 9 10 # s.set_age = set_age # 直接赋值函数名无法生成该实例的绑定方法 11 # s.set_age = MethodType(set_age,s) 12 Student.set_age = set_age 13 14 s.set_age(25) 15 print(s.age)
利用类写Fiber数列
1 class Fib(object): 2 def __init__(self): 3 self.a, self.b = 0, 1 # 初始化两个计算器 4 def __iter__(self): 5 return self # 实例实现了__iter__和__next__,把自己返回,作为迭代器对象 6 def __next__(self): 7 self.a, self.b = self.b, self.a + self.b # ?????? 8 if self.a > 100000: # 退出条件 9 raise StopIteration() 10 return self.a # 返回下一个值 11 12 for a in Fib(): 13 print(a)
魔法方法
1 #__getattr__只有在使用点调用属性且属性不存在的时候才会触发 2 3 4 class Student(object): 5 6 def __getitem__(self, n): 7 if isinstance(n, slice): 8 print(n) 9 10 def __getattr__(self, attr): 11 if attr == 'age': 12 return lambda: 25 13 raise AttributeError('\'Student\' object has no attribute \'%s\'' % attr) 14 15 s[1:4] # 打印 slice(1, 4, None)

浙公网安备 33010602011771号