あるクラスの関数内で宣言した変数を別のクラスで使用したいと思います。
たとえば、別のクラスで変数「j」を使用したいとします。出来ますか?(インスタンス変数と関係があるかもしれないとどこかで読みましたが、概念を完全に理解できませんでした)。
class check1:
def helloworld(self):
j = 5
あるクラスの関数内で宣言した変数を別のクラスで使用したいと思います。
たとえば、別のクラスで変数「j」を使用したいとします。出来ますか?(インスタンス変数と関係があるかもしれないとどこかで読みましたが、概念を完全に理解できませんでした)。
class check1:
def helloworld(self):
j = 5
class check1:
def helloworld(self):
self.j = 5
check_instance=check1()
print (hasattr(check_instance,'j')) #False -- j hasn't been set on check_instance yet
check_instance.helloworld() #add j attribute to check_instance
print(check_instance.j) #prints 5
ただし、クラスインスタンスに新しい属性を割り当てるためのメソッドは必要ありません...
check_instance.k=6 #this works just fine.
これで、他の変数を使用するのと同じようにcheck_instance.j
(または)を使用できます。check_instance.k
あなたがそれを学ぶまで、これは魔法のように少し見えるかもしれません:
check_instance.helloworld()
完全に同等です:
check1.helloworld(check_instance)
(少し考えてみると、それがself
パラメーターの説明です)。
ここで何を達成しようとしているのか完全にはわかりません-クラスのすべてのインスタンスで共有されるクラス変数もあります...
class Foo(object):
#define foolist at the class level
#(not at the instance level as self.foolist would be defined in a method)
foolist=[]
A=Foo()
B=Foo()
A.foolist.append("bar")
print (B.foolist) # ["bar"]
print (A.foolist is B.foolist) #True -- A and B are sharing the same foolist variable.
j
他のクラスからは見えません。しかし、私はあなたが意味したと思いますself.j
、それはできます。
class A(object):
def __init__(self, x):
self.x = x
class B(object):
def __init__(self):
self.sum = 0
def addA(self, a):
self.sum += a.x
a = A(4)
b = B()
b.addA(a) # b.sum = 4
クラス継承を使用すると、インスタンス変数を「共有」するのが非常に簡単です
例:
class A:
def __init__(self):
self.a = 10
def retb(self):
return self.b
class B(A):
def __init__(self):
A.__init__(self)
self.b = self.a
o = B()
print o.a
print o.b
print o.retb()