如何在不使用继承和不初始化init的情况下获取另一类中一个类的变量的值?

时间:2018-07-27 09:58:45

标签: python python-3.x

我有Pyhton类A和B。我想访问类B中的x值。

class A():
    def __init__(self):
        self.x = 0
    def do(self):
        self.x = 1 + 2

class B():
    #get the value of x which is 3, not 0.

我该怎么做?如果创建一个实例,将调用 init ,它将x重新初始化为0,但是我希望x的最终值为3。 有人可以解决吗?

1 个答案:

答案 0 :(得分:1)

避免类之间的依赖关系是OOP的重要原则,不应轻易违反。就类需要交换信息的程度而言,这应该通过公共和有记载的方法进行。

Python不会强制执行此操作,但是您可能应该寻找一种不同的方法来解决希望通过这种安排解决的任何问题。

A中没有任何x,该类本身存在;按照您定义类的方式,x是一个实例属性。仅当您拥有属于该类的对象,并且每个对象实例具有该变量的值时才与其他实例的值分开定义。该类本身没有使用该名称的变量。

也许您真的在寻找class属性,像这样吗?

class A():
    x = None

    def __init__(self):
        if self.__class__.x is None:
            self.__class__.x = 0

    def do(self):
        self.__class__.x = 3

    @classmethod
    def _get_x(cls):
        return cls.x


class B():
    :
        value_of_A_x = A._get_x()

类方法_get_x的名称中前导下划线非正式地表明这是一个私有方法。

您会注意到x具有三种状态。它以None开始,然后在创建A对象的第一个实例时,将其设置为0。第一次调用实例的do方法时,将其设置为3.当前没有其他方法可以更改其值,尽管您当然可以根据需要自由更改此代码或添加新代码。

以上内容具有高度的推测性,但至少应该可以通过解释您实际想要达到的目的来帮助您编写一个更好的问题。根本不起作用的代码不是告诉我们您实际想要的好方法。