2010-12-07 5 views
0

Pythonで書かれた非常に単純なクラス(以下のソース)。Pythonでクラス関数を呼び出した後のAttributeErrorの取得

obj1 = myClass(12)を作成し、クラス関数obj1.printInfo()を呼び出した後、エラーが発生します。AttributeError: type object 'myClass' has no attribute 'arg1'問題の原因は何ですか?

class myClass(object): 

    def __init__(self, arg1, arg2 = 0): 
     self.arg1 = arg1 
     self.arg2 = arg2 

    def printInfo (self): 
     print myClass.arg1, myClass.arg2 


obj1 = myClass(12) 
obj1.printInfo() 

ありがとう!

答えて

3

あなたがしてPRINTINFO(自己)の体を置き換える使用したい:それは時々のJava(MyClass.this)で使用されるよう、ここで自己の使用は、スコープを指定することではありません

def printInfo(self): 
    print self.arg1, self.arg2 

かPHPで。この関数では、selfは実際にarg1とarg2を含むオブジェクトです。 Pythonはこのように非常に明示的です。以前の方法では、自己に対してarg1とarg2を割り当てたので、arg1とarg2を自己から戻すことを期待する必要があります。

2番目の質問に関しては、「クラス」関数(静的メソッド)が必要な場合でも、プロパティにアクセスするためにはobj1への参照が必要です。たとえば:

class MyClass(object): 

    def __init__(self, arg1, arg2 = 0): 
     self.arg1 = arg1 
     self.arg2 = arg2 

    @staticmethod 
    def printInfo(obj): 
     print obj.arg1, obj.arg2 


obj1 = MyClass(12) 
MyClass.printInfo(obj1) 

はまた、あなたはチャンスを得るときPEP8を必ずお読みください:)

+0

回答をありがとう。私はこの質問を少し拡張します。 'printInfo()'と 'f1()'によって呼び出される 'f1()'という非クラス関数があれば、obj1引数を使用します。これはまったく可能でしょうか?ありがとう! – newprint

+0

あなたのコメントを反映するように編集された答え。 –

1

脳おなら、えっ? self.arg1myClass.arg1を切り替えます

def printInfo (self): 
    print self.arg1, self.arg2 
0

あなたはこのようにそれを行うことができます。

def f1(arg1, arg2): 
    print arg1, arg2 

class myClass(object): 
    def __init__(self, arg1, arg2 = 0): 
     self.arg1 = arg1 
     self.arg2 = arg2 
    def printInfo (self): 
     f1(self.arg1, self.arg2) 

obj1 = myClass(12) 
obj1.printInfo() 
関連する問題