如何 update/change 一个 class 由另一个 class 初始化参数?

How to update/change one class init arguments by another class?

我有两个 classes,我想称它们为 class Aclass B;我需要通过 class B 全局更改 class A 的一些初始值 而没有 making/returning 来自 class A 的任何新对象(class B 不应读取主应用程序变量,也不应从中创建全局变量)。

这是我所做的:

class A:
    def __init__(self):
        self.blah1_is_beautiful = True
        self.blah2_is_beautiful = True
        self.blah3_is_beautiful = True


class B:
    def __init__(self):
        self.null_is_null = None

    def change_some_values(self):
        # Class A instance should update here
        A.blah1_is_beautiful = False
        A.blah2_is_beautiful = False
        A.blah3_is_beautiful = False


obj1 = B()
obj1.change_some_values()
# Some codes ...
new_A_class = A()
print(new_A_class.blah1_is_beautiful)

但是我无法得到预期的结果。

注意: 我不想在我的主应用程序上从 class A 创建对象或在 class B 中将其称为全局变量并且改变它的实例; Class B 应该在不使用任何外部变量的情况下自行更新 class A 实例。

如有任何帮助,我们将不胜感激。

我有点困惑,你想改变 class A 的一个实例,还是 class 本身?要更改 obj2,此代码对我有用:

class A:
    def __init__(self):
        self.blah1_is_beautiful = True
        self.blah2_is_beautiful = True
        self.blah3_is_beautiful = True


class B:
    def __init__(self):
        self.null_is_null = None

    def change_some_values(self):
        global obj2
        obj2.blah1_is_beautiful = False
        obj2.blah2_is_beautiful = False
        obj2.blah3_is_beautiful = False

obj1 = B()
obj2 = A()
obj1.change_some_values()
print(obj2.blah1_is_beautiful)

注意实例化 classes 时顺序的变化,否则你会得到一个“obj2 未定义”的错误。

现在,每次启动新对象时,您的 __init__ 方法都会将您的属性值设置为 True。 在您的 change_some_values 方法中,您只是更改了 class A 的静态属性,但没有将它们用于任何用途。 像这样的东西可以帮助你。

class A:
    blah1_is_beautiful = True
    blah2_is_beautiful = True
    blah3_is_beautiful = True

    def __init__(self):
        self.blah1_is_beautiful = A.blah1_is_beautiful
        self.blah2_is_beautiful = A.blah2_is_beautiful
        self.blah3_is_beautiful = A.blah3_is_beautiful


class B:
    def __init__(self):
        self.null_is_null = None

    def change_some_values(self):
        A.blah1_is_beautiful = False
        A.blah2_is_beautiful = False
        A.blah3_is_beautiful = False


obj1 = B()
obj1.change_some_values()
obj2 = A()
print(obj2.blah1_is_beautiful)

https://docs.python.org/3/tutorial/classes.html#class-and-instance-variables

您可以在调用函数时添加一个额外的参数,如下所示:

class A:
    def __init__(self):
        self.blah1_is_beautiful = True
        self.blah2_is_beautiful = True
        self.blah3_is_beautiful = True


class B:
    def __init__(self):
        self.null_is_null = None

    def change_some_values(self, name):
        name.blah1_is_beautiful = False
        name.blah2_is_beautiful = False
        name.blah3_is_beautiful = False


obj_a = A()
obj_b = B()
obj_b.change_some_values(obj_a)
print(obj_a.blah1_is_beautiful)

因为 self.blah1_is_beautiful 的值对于 class 的每个实例都是唯一的,您可能需要指定要更改的实例属性。

如果您希望更改 A class 的所有实例的值,只需使用:

class A:
    blah1_is_beautiful = True
    blah2_is_beautiful = True
    blah3_is_beautiful = True
    def __init__(self):
       pass


class B:
    def __init__(self):
        self.null_is_null = None

    def change_some_values(self):
        A.blah1_is_beautiful = False
        A.blah2_is_beautiful = False
        A.blah3_is_beautiful = False


obj_a = A()
obj_b = B()
obj_b.change_some_values()
print(obj_a.blah1_is_beautiful)