2016-04-03 5 views
2
class Parent(object): 
    def __init__(self): 
     self.text = "abc" 
     self.child = self.Child() 

    def run(self): 
     self.child.task() 

    def output(self, param1): 
     print(param1) 

    class Child(object): 
     def __init__(self): 
      self.text = "cde" 

     def task(self): 
      Parent.output(Parent, self.text) # I get the warning for this line 


parent = Parent() 
parent.run() 

Pythonでネストされたクラスからのパラメータで親のメソッドを呼び出しますがのIntelliJ IDEAは、このメッセージ を私に警告している 何か問題があります「nested_classes.Parentのインスタンスは、クラス自体ではなく、期待されます」私のコードで? ありがとう!コードが期待どおりに動作上

+1

[コードレビュー](http://codereview.stackexchange.com/)にコードを掲載することをお勧めします。そこに対処できる多くの点があります。 –

+1

ZachGatesのコメントをフォローしている場合は、コードが動作するまで投稿しないようにしてください。 – zondo

答えて

3

クラスメソッドとしてoutputメソッド(インスタンスメソッド)にアクセスしようとしています。最初のパラメータselfがインスタンスオブジェクトであるためメッセージが表示されます。したがって、classを最初のパラメータとして渡すと、実際にはselfがインスタンスオブジェクトとして持つべき内容が変更されます。それがメッセージがあなたに伝えようとしていることです。 、あなたは何をしていたかに基づいて

Parent().output(self.text) 

、あなたがoutputメソッド内selfのオブジェクトのreprと内容を確認した場合:だから、何が実際にやるべきことはインスタンスメソッドとしてメソッドを呼び出すことですあなたはこれを取得:呼び出しのこのメソッドを使用して

def output(self, param1): 
    print(repr(self)) 
    print(dir(self)) 
    print(param1) 

Parent.output(Parent, self.text)

<class '__main__.Parent'> 
[ 
    'Child', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', 
    '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', 
    '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', 
    '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', 
    '__subclasshook__', '__weakref__', 'output', 'run' 
] 

ご覧のとおり、selfinstanceParentはありません。今

、あなたはインスタンスメソッドとして呼び出す場合:Parent().output(self.text)

<__main__.Parent object at 0x1021c6320> 
[ 
    'Child', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', 
    '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', 
    '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', 
    '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
    '__weakref__', 'child', 'output', 'run', 'text' 
] 

あなたが見ることができるように、あなたが今Parentオブジェクトを持っていて、オブジェクトの内容を見れば、あなたは何をあなたを持っているでしょうあなたのインスタンスのプロパティから期待します。

+0

すばらしい説明をありがとう! –

1

出力をクラスメソッドとして宣言していないため、Parentのインスタンスによって呼び出されることが想定されています。

関連する問題