使用python的super()继承属性

时间:2018-12-14 16:58:16

标签: python inheritance attributes python-2.x super

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

我无法缠住那一个。对象实例不是其类类型的实例吗?那怎么可能?

任何帮助将不胜感激。

1 个答案:

答案 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中,旧式类已被删除,因此不再需要从对象显式继承。