我知道这样做是错误的,但是我试着了解幕后发生的事情(如果你可能会用类型来扩展它)。代码如下:
>>> a = 2
>>> class C(a):
... pass
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: int() takes at most 2 arguments (3 given)
我试图理解为什么在这个例子中会调用int()
。这是a
的类型,但我不明白为什么这在这里很重要。
答案 0 :(得分:5)
您正在尝试从实例对象继承,这是一个整数对象。 Python将type(a)
视为元类型。元类型传递类名,基类的元组和类的主体作为字典;它应该产生新的类对象。
在这种情况下,这意味着type(2)('C', (2,), {})
被称为:
>>> type(2)('C', (2,), {})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: int() takes at most 2 arguments (3 given)
通常情况下,那就是type()
object本身:
>>> type('C', (object,), {})
<class '__main__.C'>
我改为使用object
作为基类。
请参阅What is a metaclass in Python?,了解您不希望了解的有关元类如何在Python中工作的所有内容。
答案 1 :(得分:1)
你基本上是这样做的:
class C(2):
pass
据我所知,你不能以这种方式从对象的实例继承。
你想这样做:
class C(int):
pass
OR
class C(type(a)):
pass