美文网首页
2020-05-23

2020-05-23

作者: 价值投机168 | 来源:发表于2020-05-23 12:23 被阅读0次

1.最简单的一个元类实例:

image.png
元类要继承与type的.
2.跟踪过程:
class Meta(type):
def new(meta,classname,supers,classdict):
print('In Meta.new ',meta,classname,supers,classdict,sep='****\n')
return type.new(meta,classname,supers,classdict)
class Eggs:
def hello(self):
print('hello eggs' + str(self.class))

print('making class Spam')
class Spam(Eggs,metaclass=Meta):
data=1
def meth(self,arg):
return self.data+arg

print('\n')
print('making class Spam2')
Spam2 = Meta('Spam2',(Eggs,),{'data':1,'meth2':(lambda x,y:x.data+y)})

print('\n')
print('makding instance')
s = Spam()
s.hello()

c=Spam2()
c.hello()
实际代码图片:


image.png

3.元类也可以不是一个类:


image.png
image.png

这就是个函数嘛。函数和类的方法的区别就是:一个有self的参数,一个没有而已。其实上面例子的meta其实就是self

4.元类:


image.png
image.png

纠正:
class A(type): attr =1
class B(A):pass
这样不会报错
但是:
b=B() #这样会出错

5.类和实例的区别:


image.png

可以理解为实例少了一个继承链

6.类方法解决方案:


image.png

7.自己实现迭代器:


image.png

要得到遍历的序号:
for x,el in enumerate(MyIterator(8)):
print(x,el)
这个x就是序号。需要加enumerate.

要实现迭代,得重写nextiter了。

8.yield的初步用法:


image.png image.png

9.yield的详细说明:


image.png

10.yield还可以抛异常,close等:


image.png

11.更简单的方式使用yield:


image.png

相关文章

网友评论

      本文标题:2020-05-23

      本文链接:https://www.haomeiwen.com/subject/jiykahtx.html