Python之面向对象slots与迭代器协议

Python之面向对象slots与迭代器协议

  slots:

 1 # class People:
 2 #     x=1
 3 #     def __init__(self,name):
 4 #         self.name=name
 5 #     def run(self):
 6 #         pass
 7 
 8 
 9 # print(People.__dict__)
10 #
11 # p=People('alex')
12 # print(p.__dict__)
13 
14 
15 class People:
16     __slots__=['x','y','z']
17 
18 p=People()
19 print(People.__dict__)
20 
21 p.x=1
22 p.y=2
23 p.z=3
24 print(p.x,p.y,p.z)
25 # print(p.__dict__)
26 
27 p1=People()
28 p1.x=10
29 p1.y=20
30 p1.z=30
31 print(p1.x,p1.y,p1.z)
32 print(p1.__dict__)
View Code

 

  item系列:

 1 #把对象操作属性模拟成字典的格式
 2 class Foo:
 3     def __init__(self,name):
 4         self.name=name
 5     def __setattr__(self, key, value):
 6         print('setattr===>')
 7     def __getitem__(self, item):
 8         # print('getitem',item)
 9         return self.__dict__[item]
10     def __setitem__(self, key, value):
11         print('setitem-----<')
12         self.__dict__[key]=value
13     def __delitem__(self, key):
14         self.__dict__.pop(key)
15         # self.__dict__.pop(key)
16     # def __delattr__(self, item):
17     #     print('del obj.key时,我执行')
18     #     self.__dict__.pop(item)
19 
20 f=Foo('George')
21 f.name='Wang'
22 f['name']='George'
23 # print(f.name)
24 # f.name='George'
25 # f['age']=18
26 # print(f.__dict__)
27 #
28 # del f['age'] #del f.age
29 # print(f.__dict__)
30 
31 # print(f['name'])
View Code

 

  __next__、__iter__ 实现迭代器协议:

  1 # from collections import Iterable,Iterator
  2 # class Foo:
  3 #     def __init__(self,start):
  4 #         self.start=start
  5 
  6 #     def __iter__(self):
  7 #         return self
  8 
  9 #     def __next__(self):
 10 #         return 'aSB'
 11 
 12 
 13 # f=Foo(0)
 14 # f.__iter__()
 15 # f.__next__()
 16 
 17 # print(isinstance(f,Iterable))
 18 # print(isinstance(f,Iterator))
 19 
 20 # print(next(f)) #f.__next__()
 21 # print(next(f)) #f.__next__()
 22 # print(next(f)) #f.__next__()
 23 
 24 
 25 # for i in f: # res=f.__iter__() #next(res)
 26 #     print(i)
 27 
 28 
 29 
 30 # from collections import Iterable,Iterator
 31 # class Foo:
 32 #     def __init__(self,start):
 33 #         self.start=start
 34 
 35 #     def __iter__(self):
 36 #         return self
 37 
 38 #     def __next__(self):
 39 #         if self.start > 10:
 40 #             raise StopIteration
 41 #         n=self.start
 42 #         self.start+=1
 43 #         return n
 44 
 45 
 46 # f=Foo(0)
 47 
 48 
 49 # print(next(f))
 50 # print(next(f))
 51 # print(next(f))
 52 # print(next(f))
 53 # print(next(f))
 54 # print(next(f))
 55 # print(next(f))
 56 # print(next(f))
 57 # print(next(f))
 58 # print(next(f))
 59 # print(next(f))
 60 # print(next(f))
 61 
 62 # for i in f:
 63 #     print('====>',i)
 64 
 65 
 66 
 67 
 68 # class Range:
 69 #     '123'
 70 #     def __init__(self,start,end):
 71 #         self.start=start
 72 #         self.end=end
 73 
 74 #     def __iter__(self):
 75 #         return self
 76 
 77 #     def __next__(self):
 78 #         if self.start == self.end:
 79 #             raise StopIteration
 80 #         n=self.start
 81 #         self.start+=1
 82 #         return n
 83 
 84 # for i in Range(0,3):
 85 #     print(i)
 86 
 87 
 88 
 89 # print(Range.__doc__)
 90 
 91 
 92 class Foo:
 93     '我是描述信息'
 94     pass
 95 
 96 class Bar(Foo):
 97     pass
 98 print(Bar.__doc__) #该属性无法继承给子类
 99 
100 b=Bar()
101 print(b.__class__)
102 print(b.__module__)
103 print(Foo.__module__)
104 print(Foo.__class__) #?
View Code

 

posted @ 2018-07-02 12:51  王先生是胖子  阅读(164)  评论(0编辑  收藏  举报