理解Python中的对象

时间:2010-11-05 16:09:22

标签: python object object-model

我对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。

我该怎么做?

6 个答案:

答案 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)

您的代码中有两个遗漏的内容:

  1. 属于某个类的方法必须有一个明确的self参数,您缺少该参数

  2. 派生的'Atom'类还需要接受初始化基类所需的参数。

  3. 更像是:

    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中的第一个参数。