你好 Stack Overflow 贡献者,
我是一个正在学习 Python 的新手程序员,我偶然发现了这个有助于解释面向对象范例的网站。我知道元类是类的类(比如元目录是目录的目录等等),但我遇到了一些问题:元类和参数化类之间的实际区别是什么,根据网站的定义?
如果可以,请在 Python 中包含说明两者之间差异的代码示例。感谢您的帮助!
你好 Stack Overflow 贡献者,
我是一个正在学习 Python 的新手程序员,我偶然发现了这个有助于解释面向对象范例的网站。我知道元类是类的类(比如元目录是目录的目录等等),但我遇到了一些问题:元类和参数化类之间的实际区别是什么,根据网站的定义?
如果可以,请在 Python 中包含说明两者之间差异的代码示例。感谢您的帮助!
Python 没有(或不需要)“参数化类”,因此很难在 Python 中提供它们的示例;-)。元类只是“类的类”:通常type
(只要在 Py2 中,您记得通过继承自object
或其他内置类型或其他新样式类来使类成为新样式——旧的-style 类是 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
在这个例子中(在我能想到的几乎所有更现实的例子中——我只是选择举一个简单的例子,这样做的意义很难辨别,而不是现实的,因此必然非常复杂;-)。