Python 2.7.10
嗨,
我要做的就是继承超类属性,这是标准的面向对象的事情。
根据我在网上和其他地方可以找到的信息,这种方法应该有效:
class SubClass(MyParentClass):
def __init__(self):
super(SubClass, self).__init__()
得到:
TypeError: must be type, not classobj
那不是一种类型吗?我的问题是:
class SubClass(MyParentClass):
def __init__(self):
super(type(self.__class__), self).__init__()
得到:
TypeError: super(type, obj): obj must be an instance or subtype of type
我无法缠住那一个。对象实例不是其类类型的实例吗?那怎么可能?
任何帮助将不胜感激。
答案 0 :(得分:3)
在Python2中,super
仅在类层次结构继承自object
的情况下起作用。
如果超类被声明为
class Foo:
...
您将看到错误,因为创建的类是old0style类,但不支持super
超类声明必须为
class Foo(object):
....
例如:
>>> class Foo:pass
...
>>> class Bar(Foo):
... def __init__(self):
... super(Bar, self).__init__()
...
>>> b = Bar()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
TypeError: super() argument 1 must be type, not classobj
在Python3中,旧式类已被删除,因此不再需要从对象显式继承。