[英]Create an instance of a class inside the same class and use the same class as parameter
[英]How to create a static instance of a class inside the same class?
我有一个包含一些属性的数据类,如下例所示。
如何创建类的静态实例并将其保留为同一类的一部分?
我需要这个的原因是因为稍后我想通过例如 TestClass.STATIC_INSTANCE1.attribute1 来访问这些字段。
@dataclass
class TestClass:
attribute1: str
attribute2: int
STATIC_INSTANCE1 = TestClass("instance1", 1)
STATIC_INSTANCE2 = TestClass("instance2", 1)
通常这样做是不受欢迎的,因为它会创建循环引用,尤其是当您在函数内部动态生成类时会出现问题。
如果这不是你的情况,你可以像这样创建它:
@dataclass
class TestClass:
attribute1: str
attribute2: int
TestClass.STATIC_INSTANCE1 = TestClass("instance1", 1)
TestClass.STATIC_INSTANCE2 = TestClass("instance2", 1)
我建议你完全避免这样做,而只是在类之外定义STATIC_INSTANCE1
,但它需要在用户端额外from...import
s。
这被称为单例设计模式。 它在Java中使用最广泛,据我所知,教科书的实现是在必要时立即使用一种方法来初始化静态实例,并获取该静态实例:
@dataclass
class TestClass:
attribute1: str
attribute2: int
_STATIC_INSTANCE1 = None
_STATIC_INSTANCE2 = None
@staticmethod
def get_static_instance1():
if TestClass._STATIC_INSTANCE1 is None:
TestClass._STATIC_INSTANCE1 = TestClass("instance1", 1)
return TestClass._STATIC_INSTANCE1
# ditto for static instance 2
但是,由于与 Java 不同,python 允许自由浮动对象(并非所有内容都必须是类),请考虑这些静态实例是否真的需要绑定到TestClass
本身,或者它们是否可以浮动在同一个文件中:
@dataclass
class TestClass:
attribute1: str
attribute2: int
...
pass
STATIC_INSTANCE1 = TestClass("instance1", 1)
STATIC_INSTANCE2 = TestClass("instance2", 1)
# import STATIC_INSTANCE1 and STATIC_INSTANCE2 from the same file as TestClass,
# but separately
如果可能,后一种方法在 Python 中是首选的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.