[英]How would I access variables from one class to another?
我正在編寫一個使用多個類的程序。 我有一個專門用於確定一組變量的值的類。 然后我希望能夠使用其他類訪問這些變量的值。 我的代碼如下所示:
class ClassA(object):
def __init__(self):
self.var1 = 1
self.var2 = 2
def methodA(self):
self.var1 = self.var1 + self.var2
return self.var1
class ClassB(ClassA):
def __init__(self):
self.var1 = ?
self.var2 = ?
object1 = ClassA()
sum = object1.methodA()
print sum
我使用 classA 來初始化 2 個變量(var1 和 var2)。 然后我使用 methodA 添加它們,將結果保存為 var1(我認為這將使 var1 = 3 和 var2 = 2)。 我想知道的是,我如何讓 ClassB 能夠從 ClassA 獲取 var1 和 var2 的值?
var1
和var2
是實例變量。 這意味着您必須將ClassA
的實例發送到ClassB
才能讓 ClassB 訪問它,即:
class ClassA(object):
def __init__(self):
self.var1 = 1
self.var2 = 2
def methodA(self):
self.var1 = self.var1 + self.var2
return self.var1
class ClassB(ClassA):
def __init__(self, class_a):
self.var1 = class_a.var1
self.var2 = class_a.var2
object1 = ClassA()
sum = object1.methodA()
object2 = ClassB(object1)
print sum
另一方面 - 如果您要使用類變量,則可以訪問 var1 和 var2,而無需將 object1 作為參數發送給 ClassB。
class ClassA(object):
var1 = 0
var2 = 0
def __init__(self):
ClassA.var1 = 1
ClassA.var2 = 2
def methodA(self):
ClassA.var1 = ClassA.var1 + ClassA.var2
return ClassA.var1
class ClassB(ClassA):
def __init__(self):
print ClassA.var1
print ClassA.var2
object1 = ClassA()
sum = object1.methodA()
object2 = ClassB()
print sum
但是請注意,類變量在其類的所有實例之間共享。
你能解釋一下你為什么要這樣做嗎?
您正在使用不會從一個類遷移到另一個類的實例變量/屬性(它們甚至不綁定到ClassA
,而是綁定到您在編寫ClassA()
時創建的ClassA
的特定實例)。 如果你想讓一個類中的更改顯示在另一個類中,你可以使用類變量:
class ClassA(object):
var1 = 1
var2 = 2
@classmethod
def method(cls):
cls.var1 = cls.var1 + cls.var2
return cls.var1
在這種情況下, ClassB
將從繼承中獲取ClassA
上的值。 然后,您可以通過ClassA.var1
、 ClassB.var1
甚至從實例ClassA().var1
訪問類變量(前提是您沒有添加實例方法var1
,該方法將在屬性查找中的類變量之前解析。
在我知道這是否是我真正推薦的行動方案之前,我必須更多地了解您的特定用例......
class ClassA(object):
def __init__(self):
self.var1 = 1
self.var2 = 2
def method(self):
self.var1 = self.var1 + self.var2
return self.var1
class ClassB(ClassA):
def __init__(self):
ClassA.__init__(self)
object1 = ClassA()
sum = object1.method()
object2 = ClassB()
print sum
我們可以使用對象引用從一個類訪問/傳遞參數/變量到另一個類。
#Class1
class Test:
def __init__(self):
self.a = 10
self.b = 20
self.add = 0
def calc(self):
self.add = self.a+self.b
#Class 2
class Test2:
def display(self):
print('adding of two numbers: ',self.add)
#creating object for Class1
obj = Test()
#invoking calc method()
obj.calc()
#passing class1 object to class2
Test2.display(obj)
var1 和 var2 是ClassA的實例變量。 創建一個 ClassB 實例,當調用 methodA 時,它將首先檢查 Child 類( ClassB )中的 methodA,如果ClassB 中不存在methodA,則您需要使用super() 方法調用ClassA ,這將為您提供所有方法在ClassA 中實現。 現在,您可以訪問 ClassB 的所有方法和屬性。
class ClassA(object):
def __init__(self):
self.var1 = 1
self.var2 = 2
def methodA(self):
self.var1 = self.var1 + self.var2
return self.var1
class ClassB(ClassA):
def __init__(self):
super().__init__()
print("var1",self.var1)
print("var2",self.var2)
object1 = ClassB()
sum = object1.methodA()
print(sum)
只需在類中創建變量。 然后從該類繼承以訪問其變量。 但是在訪問它們之前,必須調用父類來啟動變量。
class a:
def func1(self):
a.var1 = "Stack "
class b:
def func2(self):
b.var2 = "Overflow"
class c(a,b):
def func3(self):
c.var3 = a.var1 + b.var2
print(c.var3)
a().func1()
b().func2()
c().func3()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.