簡體   English   中英

我將如何從一個類訪問變量到另一個類?

[英]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 的值?

var1var2實例變量 這意味着您必須將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.var1ClassB.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM