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

元类要继承与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()
实际代码图片:

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


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


纠正:
class A(type): attr =1
class B(A):pass
这样不会报错
但是:
b=B() #这样会出错
5.类和实例的区别:

可以理解为实例少了一个继承链
6.类方法解决方案:

7.自己实现迭代器:

要得到遍历的序号:
for x,el in enumerate(MyIterator(8)):
print(x,el)
这个x就是序号。需要加enumerate.
要实现迭代,得重写next和iter了。
8.yield的初步用法:


9.yield的详细说明:

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

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

网友评论