8

Pythonのオブジェクトモデルに少し戸惑っています。私には2つのクラスがあり、一方は他方から継承します。

class Node():
  def __init__(identifier):
    self.identifier = identifier

class Atom(Node):
  def __init__(symbol)
    self.symbol = symbol

私がやろうとしているのは、__ init __ ()メソッドをオーバーライドするのではなく、属性symbolidentifierを持つアトムのインスタンスを作成することです。

このような:

Atom("Fe", 1) # will create an atom with symbol "Fe" and identifier "1"

したがって、Atomのインスタンスが作成されたら、Atom.identifierとAtom.symbolにアクセスできるようにしたいと思います。

どうやってやるの?

4

6 に答える 6

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'>
>>> 

コード内のオブジェクトから継承することをお勧めします。

于 2010-11-05T16:15:19.847 に答える
6

__init__スーパークラスの-methodを手動で呼び出す必要があります。

class Atom(Node):
  def __init__(self, symbol, identifier)
    Node.__init__(self, identifier)
    self.symbol = symbol
于 2010-11-05T16:12:55.670 に答える
3

クラスを作成するときは、宣言でセルフワードを使用する必要があります。その後、他の引数を定義できます。継承するには、superinitメソッドを呼び出します。

>>> 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
>>>
于 2010-11-05T16:18:29.083 に答える
2

コードに欠けているものが2つあります。

  1. クラスに属するメソッドには明示的なselfパラメーターが必要ですが、これが欠落しています

  2. 派生した「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
于 2010-11-05T16:17:09.940 に答える
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

およびの説明については、ここを参照してください。を使用すると、Atomクラスの基本クラス(スーパークラス)にアクセスして、それを呼び出すことができます。また、パラメータも含める必要があります。*args**kwargssuper__init__self

于 2010-11-05T16:13:36.227 に答える
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の最初のパラメーターとして使用されます。
于 2010-11-05T16:17:58.583 に答える