1

クラス C があります。このクラスを 1 つの引数でインスタンス化したいと思います。その引数を d としましょう。だから私は myC = C(d=5) をしたいと思います。C には、e という別の変数も必要です。e の値は、クラスのインスタンス化時に d に設定する必要があります。

だから私はこれを書いた:

>>> class C:
...     def __init__(self,d):
...         self.d = d
...     e = d
... 

しかし、それは私に次のエラーを与えます:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in C
NameError: name 'd' is not defined

わかりましたので、少し違うことを試してみます。

>>> class C:
...     def __init__(self,d):
...         self.d = d
...     e = self.d
... 

しかし、それは私にこのエラーを与えます:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in C
NameError: name 'self' is not defined

では、私がやろうとしていることをどのように行うべきですか?? これは非常に単純なはずです。

4

2 に答える 2

8

メソッドeの一部も作成する必要があります。その関数が呼び出されるまで定義されません:__init__d

class C:
    def __init__(self,d):
        self.d = d
        self.e = d

必要に応じて、これらを同じ行に配置できます。

class C:
    def __init__(self,d):
        self.d = self.e = d

インスタンス属性ではなくクラス属性にする必要eがある場合は、クラスを直接参照してください。

class C:
    def __init__(self,d):
        self.d = d
        C.e = d

または使用type(self)

class C:
    def __init__(self,d):
        self.d = d
        type(self).e = d

後者は、 をサブクラス化するCと、 class 属性が代わりに適切なサブクラスに設定されることを意味します。

于 2013-06-01T10:05:34.557 に答える
0
class C:
    def __init__(self,d):
        self.d = self.e = d
于 2013-06-01T10:05:18.460 に答える