如何通过另一个类更新/更改一个类的初始化参数?

问题描述

我有两个班级,我想称它们为A级B级;我需要通过 B 类全局更改 A 类的一些初始化值而不创建/返回类 A 中的任何新对象(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)

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

注意:我不想在我的主应用程序上从 A 类创建一个对象,或者在 B 类中将其称为全局变量并更改其实例; B 类应该自己更新 A 类实例,而不使用任何外部变量。

对此的任何帮助表示赞赏。

解决方法

现在,每次启动新对象时,您的 .bin 方法都会将属性值设置为 __init__。 在您的 True 方法中,您只更改 A 类的静态属性,但不会将这些用于任何事情。 像这样的事情可以帮助你。

change_some_values

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

,

我有点糊涂,你是想改变A类的一个实例,还是类本身?要更改 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)

在实例化类时注意顺序的变化,否则你会得到一个“obj2 is not defined”错误。

,

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

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 的值对于类的每个实例都是唯一的,因此您可能希望指定要更改的实例属性。

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

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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...