0

ここで単純なものが欠けていることはわかっています。他の回答を調べましたが、この問題は見つかりませんでした。

>>> class Ben:
...     """Can access variable but not method"""
...     i = 320894
...     def foo(self):
...             return i
... 
>>> Ben.i
320894
>>> Ben.foo(self)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'self' is not defined
4

4 に答える 4

3

この場合、クラス インスタンスをインスタンス化し、そこからメソッドを呼び出す必要があります。

>>> class Ben:
    """Can access variable but not method"""
    i = 320894
    def foo(self):
        return self.i

>>> a = Ben()
>>> a.foo()
320894

PS - 引数として渡さないのでself、return ステートメントを に変更する必要がありますself.i

于 2013-07-25T19:15:56.867 に答える
3

まず、クラスのインスタンスを作成する必要があります。「self」は最初のパラメーターとして自動的に追加されます。自分で渡すことはできません。

ben = Ben()
ben.foo()
于 2013-07-25T19:15:59.773 に答える
1

インスタンスメソッドからクラス属性を取得するために(頭から離れて)考えることができるさまざまな方法を次に示します。

class Ben:
     i = 320894
     def foo(self):
        return self.i, self.__class__.i, Ben.i, Ben.__dict__['i'], getattr(Ben,'i')

print Ben().foo()  

版画:

(320894, 320894, 320894, 320894, 320894)

Ben().foo()vsに注意してくださいBen.foo(self)-- 呼び出す前に Ben のインスタンスが必要であり、fooそのインスタンスのメソッドとして をself呼び出すことは暗黙的です。と同様にインスタンスを作成してから呼び出すfoo場合Ben().foo()b=Ben()b.foo()

self.iまたはBen.i最も簡単です。これらは異なる可能性があることに注意してください。self.iはインスタンス属性でBen.iあり、クラス属性です:

class Ben(object):
    i = 'class i'

    def __init__(self):
        self.i='instance i'

    def foo(self):
        return ('Instance i:',self.i, getattr(self,'i'), self.__dict__['i'],
                'Class i:',self.__class__.i, getattr(Ben,'i'), Ben.i, Ben.__dict__['i'])

print Ben().foo() 

版画:

('Instance i:', 'instance i', 'instance i', 'instance i', 
 'Class i:', 'class i', 'class i', 'class i', 'class i')
于 2013-07-25T19:47:06.670 に答える