yrs*_*nkd 6 python metaclass class parameterized
Hello Stack Overflow的贡献者,
我现在是一名学习Python的新手程序员,我来到这个网站,它有助于解释面向对象的范例.我知道元类是类的类(比如元目录是目录的目录等等),但我遇到了一些问题:元类和参数化类之间的实际区别是什么,根据网站的定义?
如果可以,请在Python中包含代码示例,以说明两者之间的差异.谢谢您的帮助!
Ale*_*lli 15
Python没有(或需要)"参数化类",因此很难在Python中提供它们的示例;-).元类只是"类的类":通常type(在Py2中,因为你记得通过继承object或其他一些内置类型或其他新式类使旧类成为新类)样式类是Py2中的遗留物,幸运的是在Py3中消失了,理想情况下你应该忘记它们.你可以type为一些高级目的制作一个自定义元类(通常是子类),但是你不太可能需要(特别是考虑到这一点,因为python 2.6,过去需要自定义元类的大部分内容现在可以更简单地完成与类装饰器).
给定任何C类,type(C)是它的元类.
参数化类是一个完全不同的概念.最接近你可以在Python中使用它可能是一个工厂函数,它根据其参数生成并返回一个类:
def silly(n):
    class Silly(object):
        buh = ' '.join(n * ['hello'])
    return Silly
Silly1 = silly(1)
Silly2 = silly(2)
a = Silly1()
print(a.buh)
b = Silly2()
print(b.buh)
将打印
hello
hello hello
同样,它绝对不是你经常需要的东西 - 制作几个只有一个或几个参数不同的类.无论如何,正如你所看到的,它与类的类(AKA元类)完全无关,它总是type在这个例子中(在我能想到的几乎每个更现实的例子中 - 我只是选择给出一个简单的例子) ,这样做的目的很难辨别,而不是一个现实的,因此必然非常复杂的一个;-).