我对Python的对象模型有点困惑。我有两个类,一个继承自另一个。
class Node():
def __init__(identifier):
self.identifier = identifier
class Atom(Node):
def __init__(symbol)
self.symbol = symbol
我要做的是不要覆盖 __ init __ ()方法,而是创建一个具有符号属性的atom实例和标识符。
像这样:
Atom("Fe", 1) # will create an atom with symbol "Fe" and identifier "1"
因此,我希望能够在创建Atom实例后访问Atom.identifier和Atom.symbol。
我该怎么做?
答案 0 :(得分:7)
>>> class Node(object):
... def __init__(self, id_):
... self.id_ = id_
...
>>> class Atom(Node):
... def __init__(self, symbol, id_):
... super(Atom, self).__init__(id_)
... self.symbol = symbol
...
>>> a = Atom("FE", 1)
>>> a.symbol
'FE'
>>> a.id_
1
>>> type(a)
<class '__main__.Atom'>
>>>
在代码中从对象继承是个好主意。
答案 1 :(得分:6)
您必须手动调用超级类的__init__
- 方法。
class Atom(Node):
def __init__(self, symbol, identifier)
Node.__init__(self, identifier)
self.symbol = symbol
答案 2 :(得分:3)
创建课程时,您需要在声明中使用自我字。之后,您可以定义其他参数。要继承,请调用超级 init 方法:
>>> class Node():
... def __init__(self, identifier):
... self.identifier = identifier
...
>>>
>>> class Atom(Node):
... def __init__(self, symbol, identifier):
... Node.__init__(self, identifier)
... self.symbol = symbol
...
>>>
>>>
>>> fe = Atom("Fe", 1)
>>> fe.symbol
'Fe'
>>> fe.identifier
1
>>>
答案 3 :(得分:2)
您的代码中有两个遗漏的内容:
属于某个类的方法必须有一个明确的self
参数,您缺少该参数
派生的'Atom'类还需要接受初始化基类所需的参数。
更像是:
class Node():
def __init__(self, identifier):
self.identifier = identifier
class Atom(Node):
def __init__(self, identifier, symbol)
Node.__init__(self, identifier)
self.symbol = symbol
答案 4 :(得分:1)
class Node():
def __init__(self, identifier):
self.identifier = identifier
class Atom(Node):
def __init__(self, symbol, *args, **kwargs)
super(Atom, self).__init__(*args, **kwargs)
self.symbol = symbol
有关*args
和**kwargs
的说明,请参阅here。通过使用super
,您可以访问Atom类的基类(超类)并将其称为__init__
。此外,还需要包含self
参数。
答案 5 :(得分:1)
class Node(object):
def __init__(self, identifier):
self.identifier = identifier
class Atom(Node):
def __init__(self, symbol, *args, **kwargs)
super(Atom, self).__init__(*args, **kwargs)
self.symbol = symbol
点数:
object
。super
调用父类的__init__
函数。self
作为Python中的第一个参数。