Python面向对象编程(三)

第29,33个:类成员之特殊成员

29:

 1 class foo:
 2 
 3   #def __init__(self,name):
 4   #self.name = name
 5 
 6   def __init__(self): #构造方法
 7     print("init")
 8   def __del__(self): #析构方法,自动执行
 9     pass
10 
11   def __call__(self, *args, **kwargs):
12     print("call")
13 
14 
15 obj = foo() #创建对象执行init方法
16 obj() #对象加括号执行call方法
17 
18 ret = obj.__class__ #运行的类名赋值给ret
19 #print(ret)
 1 class foo:
 2 
 3     def __init__(self,name,age):
 4         self.name = name
 5         self.age = age
 6 
 7     def __str__(self):  #特殊成员__str__
 8         return "%s + %s" %(self.name,self.age)
 9 obj1 = foo("kai",23)
10 obj = foo("han",24)
11 print(obj)
12 print(obj1)

 30:

 1 class foo:
 2     def __init__(self,name,age):
 3         self.name = name
 4         self.age = age
 5 
 6 obj = foo("han",19)
 7 ret = obj.__dict__ #获取对象中封装的所有数据
 8 print(ret)
 9 #输出的是:{'age': 19, 'name': 'han'}
10 
11 print(foo.__dict__) #获取类中封装的所有数据

 32:

 1 class foo:
 2     #如果有两个getitem执行后一个
 3     def __getitem__(self, item):
 4         print(item.start)
 5         print(item.stop)
 6         print(item.step)
 7 
 8     def __getitem__(self, item): #运行的ret和rets
 9         print(type(item))
10 
11     def __setitem__(self, key, value): #key=[1:4] value=[22,33,55,66,77]
12         print(type(key),type(value))
13     
14     def __delitem__(self, key):
15         pass
16 
17 obj = foo()  #创建对象
18 ret = obj[1:9:5] #切片
19 rets = obj["hk"]
20 
21 obj[1:4] = [22,33,55,66,77]

33:

1 class foo:
2     def __iter__(self): #iter迭代方法
3         yield 1
4         yield 2 
5         
6 obj = foo()
7 for item in obj:  #obj调用函数方法里的iter
8     print(item)

 第35个:其他之isinstance和issubclass

 1 class bar:
 2     pass
 3 
 4 class foo(bar):
 5     pass
 6 obj = foo()
 7 ret = isinstance(obj,foo) #查看obj对象是不是foo的实例
 8 ret1 = isinstance(obj,bar) #查看obj对象是不是 foo的父类bar的实例
 9 print(ret)
10 print(ret1)
11 
12 rets = issubclass(foo,bar) #foo是不是bar的子类,如果是子类返回true,如果不是返回false
13 print(rets)

重要:

!!!在不修改源代码的前提下,通过继承的方式实现功能

 1 class c1:
 2     def f1(self):
 3         print("c1.f1")
 4 
 5 class c2(c1):
 6     def f1(self):
 7         #主动执行父类的f1方法
 8         super(c2,self).f1()
 9         #c1.f1(self)主动执行父类的另一种形式,知道就好不建议使用
10         print("c2.f1")
11 
12 obj = c2()
13 obj.f1()
14 
15 '''
16 输入结果:
17 c1.f1
18 c2.f1
19 '''

 第39个:单例模式

 1 class foo:
 2 
 3     instance = None #静态字段由类访问
 4 
 5     def __init__(self,name):
 6         self.name = name
 7 
 8     @classmethod #类方法
 9     def get_instance(cls): #类名
10         if cls.instance:
11             return cls.instance
12         else:
13             obj = cls("han")
14             cls.instance = obj
15             return obj
16 
17 obj = foo.get_instance()
18 obj1 = foo.get_instance() 

 

 

 

posted @ 2016-08-09 15:42  韩凯1990  阅读(415)  评论(0编辑  收藏  举报