如何 update/change 一个 class 由另一个 class 初始化参数?
How to update/change one class init arguments by another class?
我有两个 classes,我想称它们为 class A 和 class 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)
我有两个 classes,我想称它们为 class A 和 class 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)