[英]Share variable between instances of the same class in python
我有一个我需要的 class:
如果不通过那我就使用前面object init的参数。
为此,我需要在对象之间共享一个变量(所有对象都属于具有相同父级的类)。
例如:
class MyClass:
shared_variable = None
def __init__(self, paremeter_optional=None):
if paremeter_optional is None: # Parameter optional not given
if self.shared_variable is None:
print("Error! First intance must have the parameter")
sys.exit(-1)
else:
paremeter_optional = self.shared_variable # Use last parameter
self.shared_variable = paremeter_optional # Save it for next object
objA = MyClass(3)
objB = MyClass()
因为 shared_variable 在初始化之间不一致/共享,所以在运行上述代码时出现错误:
Error! First intance must have the parameter
(objB的第二次初始化之后)
当然,我可以使用全局变量,但我想尽可能避免使用它,并为此使用一些最佳实践。
更新:误解了最初的问题,我仍然建议明确,而不是在 class之外更好地跟踪 class 轨道信息。
class MyClass:
def __init__(self, parameter):
...
objA = MyClass(3)
objB = MyClass(4)
objC = MyClass(5)
objD = MyClass(5) # Be explicit; don't "remember" what was used for objC
如果objC
和objD
足够“相关”,以至于objD
可以依赖于objC
的初始化,并且您想要 DRY,请使用类似
objC, objD = [MyClass(5) for _ in range(2)]
原答案:
我根本不会把它做成你从实例中设置的东西。 这是一个 class 属性,因此只能在 class 级别设置。
class MyClass:
shared_variable = None
def __init__(self):
if self.shared_variable is None:
raise RuntimeError("shared_variable must be set before instantiating")
...
MyClass.shared_variable = 3
objA = MyClass()
objB = MyClass()
为self.shared_variable
使self.shared_variable
成为实例属性,因此该值不会在实例之间共享。
您可以改为通过引用实例的 class object 的属性,将值显式分配给 class 属性。
改变:
self.shared_variable = paremeter_optional
至:
self.__class__.shared_variable = paremeter_optional
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.