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)
View Code

 

利用类写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)
View Code

 

魔法方法

 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)

 

posted @ 2019-07-02 21:33  甜麦地  阅读(95)  评论(0)    收藏  举报