pythonと私はその愚かな質問を確信していますが、私はこのようなものを試しています:
def setavalue(self):
self.myname = "harry"
def printaname():
print "Name", self.myname
def main():
printname()
if __name__ == "__main__":
main()
私が得ているエラーは次のとおりです:
NameError: global name 'self' is not defined
私が読んだいくつかのコードで、selfステートメントを使用してさまざまなメソッドの変数を参照し、正常に機能しているこの方法を見ました。
助けてくれてありがとう
self
は、クラス内の自己参照です。コードはクラス内にありません。関数のみが定義されています。以下のように、クラスでメソッドをラップする必要があります。メソッドmain()
を使用するには、まずクラスのオブジェクトをインスタンス化し、そのオブジェクトで関数を呼び出す必要があります。
さらに、関数setavalue
は__init___
、オブジェクトをインスタンス化するときに呼び出されるメソッド。次のステップはおそらくinitの引数として名前を指定することです。したがって、Name
クラスの任意の名前のオブジェクトを作成できます;)
class Name:
def __init__(self):
self.myname = "harry"
def printaname(self):
print "Name", self.myname
def main(self):
self.printaname()
if __name__ == "__main__":
objName = Name()
objName.main()
Pythonチュートリアル)のクラスの章 at Pythonに飛び込む を参照してください。
In Python self
は、クラスのインスタンスメソッドの最初の引数に与えられる従来の名前であり、常にメソッドが呼び出されたインスタンスです。
class A(object):
def f(self):
print self
a = A()
a.f()
あなたのようなものを与えます
<__main__.A object at 0x02A9ACF0>
次のようになります。
class Person:
def setavalue(self, name):
self.myname = name
def printaname(self):
print "Name", self.myname
def main():
p = Person()
p.setavalue("harry")
p.printaname()
Javaなどの言語を使用している場合、self
とthis
の間に何らかの関連付けを行うことができます。self
はそのメソッドを呼び出したオブジェクトへの参照ですが、最初にクラスを宣言する必要があります。
class MyClass(object)
def __init__(self)
#equivalent of constructor, can do initialisation and stuff
def setavalue(self):
self.myname = "harry"
def printaname(self):
print "Name", self.myname
def main():
#Now since you have self as parameter you need to create an object and then call the method for that object.
my_obj = MyClass()
my_obj.setavalue() #now my_obj is passed automatically as the self parameter in your method declaration
my_obj.printname()
if __name__ == "__main__":
main()
いくつか試してみることができますPythonこちらのような基本チュートリアル: Pythonガイド
self
名は、クラスインスタンスのインスタンス参照として使用されます。クラスメソッド定義でのみ使用されます。関数では使用しないでください。
また、他の関数またはメソッドからローカル変数を参照することはできません。それを使用してインスタンスまたはクラスの属性のみを参照できます。