2017-06-16 7 views
0

関数内の別の変数にアクセスしようとしています。別のクラスの変数にもアクセスしようとしています。別のクラスのクラスの関数の内部で使用する変数の使用方法 - Python

class Helloworld: 

    def printHello(self): 
     self.hello = 'Hello World' 
     print (self.hello) 


class Helloworld2(Helloworld): 
    def printHello2(self) 
     print(self.hello) 

b = Helloworld2() 
b.printHello2() 

a = Helloworld() 
a.printHello() 

しかし、これは私にエラー:AttributeError: 'Helloworld2' object has no attribute 'hello'を与えます。だから、その変数にアクセスする最も単純な方法は何でしょうか?

+1

コードを正しくインデントしてください。理解することが重要です。 – deceze

+0

'self.hello'は' printHello'を実行したときにのみ設定されます。そのメソッドを呼び出さないと、 'self.hello'は存在しません。 'Helloworld2'の場合、そのメソッドは呼び出されません。これを '__init__'に移動して、クラスがインスタンス化されるときにプロパティが設定されるようにすることができます。 – deceze

答えて

2

printHello(self)にはself.helloと決して電話することはないからです。

それはあなたがする必要がある動作させるには:あなたの

class Helloworld2(Helloworld): 
    def printHello2(self): 
     super().printHello() 
     print(self.hello) 

または移動宣言がより好ましい方法でしょう__init__()にself.hello。

1

クラスのインスタンスを__init__()関数で初期化する必要があります。これは、作成時にこれらの値が設定されることを意味します。以下のようにあなたのコードを見てになるだろう

:あなたの現在のコードで、

class Helloworld: 
    def __init__(self): 
     #sets self.hello on creation of object 
     self.hello = 'Hello World' 

    def printHello(self): 
     print (self.hello) 


class Helloworld2(Helloworld): 
    def printHello2(self): 
     print(self.hello) 

b = Helloworld2() 
b.printHello2() 

a = Helloworld() 
a.printHello() 

代替はちょうど、またはprintHello2内で、トップレベルのいずれかで、printHello()を呼び出すことです。この場合、でその関数を再定義しないので、実際にはsuper().printHello()を使用する必要はありませんが、そうした場合は必要になります。

関連する問題