如何从一个类访问另一个类的变量?

2025-02-25 09:07:00
admin
原创
22
摘要:问题描述:我正在编写一个使用多个类的程序。我有一个类专门用于确定一组变量的值。然后我希望能够使用其他类访问这些变量的值。我的代码如下所示:class ClassA(object): def __init__(self): self.var1 = 1 self.var2 ...

问题描述:

我正在编写一个使用多个类的程序。我有一个类专门用于确定一组变量的值。然后我希望能够使用其他类访问这些变量的值。我的代码如下所示:

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 的值?


解决方案 1:

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

但请注意,类变量在其类的所有实例之间共享。

解决方案 2:

你能解释一下为什么你想这样做吗?

您正在尝试使用不会从一个类迁移到另一个类的实例变量/属性(它们甚至不绑定到 ,而是绑定到您在编写 时创建的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,该方法将在属性查找中在类变量之前解析)。

我必须先对您的具体用例有更多的了解,然后才能知道这是否是我真正推荐的行动方案……

解决方案 3:

var1 和 var2 是ClassA的实例变量。创建 ClassB 的实例,当调用 methodA 时,它将首先检查子类(ClassB )中的方法A,如果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)

解决方案 4:

我们可以使用对象引用来访问/传递参数/变量从一个类到另一个类。

#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)

解决方案 5:

只需在类中创建变量。然后从该类继承以访问其变量。但在访问它们之前,必须调用父类来初始化变量。

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()

解决方案 6:

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
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1344  
  IPD(Integrated Product Development)流程是一套先进的产品开发管理体系,旨在通过整合跨部门资源,实现产品的高效开发与交付。在IPD流程中,确保项目按时交付是至关重要的,它直接关系到企业的市场竞争力和客户满意度。以下将从多个关键方面探讨如何在IPD流程阶段确保项目按时交付。精准的项目规划项...
IPD流程分为几个阶段   1  
  IPD(Integrated Product Development)流程是一套先进的产品开发管理体系,旨在缩短产品上市时间、提高产品质量、降低成本并增强企业的市场竞争力。深入理解IPD流程阶段的关键要素,对于企业成功实施IPD,实现产品开发的高效运作至关重要。IPD流程的概念与重要性IPD流程强调将产品开发视为一个整...
IPD测试流程   2  
  IPD(Integrated Product Development)产品开发流程是一套先进的、旨在提高产品开发效率与质量的管理体系。在这个体系中,评审环节起着至关重要的作用,它们如同关卡,确保产品在各个阶段都朝着正确的方向前进,符合市场需求和企业战略。其中有四个评审环节尤为关键,它们分别在不同阶段对产品进行全面审视,...
研发IPD流程   2  
  IPD(Integrated Product Development)研发管理体系是一套先进的、面向市场和客户的产品开发管理理念、模式和方法,旨在缩短产品上市时间、降低成本、提高产品质量,增强企业的核心竞争力。在IPD研发管理体系中,有五个关键流程起着至关重要的作用,它们相互关联、相互影响,共同构成了一个高效、协同的产...
IPD流程培训   2  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用