使用类的实例
Posted
技术标签:
【中文标题】使用类的实例【英文标题】:Using instance of class 【发布时间】:2017-12-16 04:35:11 【问题描述】:是否有一种“pythonic”方式来为模块。例如:
class MyClass:
def __init__(self):
self.my_var = "cool value"
_instance = MyClass()
def getInstance():
return _instance()
目标是通过应用程序共享大型查找类,而不是在每次导入时都初始化它们。
【问题讨论】:
“而不是在每次导入时都初始化它们”-这部分问题表明您可能对 Python 的导入系统如何工作有一个糟糕的心理模型。 Python 不会在每次导入时重做模块初始化;一个模块已经在导入它的所有其他模块之间共享。 我没有遵循您所说的“通过应用程序共享大型查找类”的意思。请举例说明您设想如何使用它? 对我来说这闻起来像 Java...getInstance
函数的意义何在?请注意,它会引发错误,因为您返回调用 _instance
的结果,但 MyClass
对象不可调用...
要回答所有这些问题,我想做下面的答案。仍然不习惯在python中导入。
【参考方案1】:
您可以从模块中导入任何内容。类实例也不例外:
file1.py
class MyClass:
def __init__(self):
self.my_var = "cool value"
instance = MyClass()
file2.py
from file1 import instance
【讨论】:
【参考方案2】:如果您的实例是以某种方式动态创建的,并且您确实需要跟踪它们,您可以覆盖 __new__
,如下所示:
class MyClass:
instances = []
def __new__(cls, *args, **kwargs):
my_instance = super(MyClass, cls).__new__(cls, *args, **kwargs)
MyClass.instances.append(my_instance)
return my_instance
a = MyClass()
print(MyClass.instances)
【讨论】:
好主意,但我认为我不应该掩盖这样的真实情况。也许如果我将其打包以供外部项目使用。以上是关于使用类的实例的主要内容,如果未能解决你的问题,请参考以下文章