使用类的实例

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)

【讨论】:

好主意,但我认为我不应该掩盖这样的真实情况。也许如果我将其打包以供外部项目使用。

以上是关于使用类的实例的主要内容,如果未能解决你的问题,请参考以下文章

使用类的实例

可以使用类的成员函数更改对象的实例吗?

C# 在类的新实例中使用 Forms 元素

Python中类的声明,使用,属性,实例属性,计算属性及继承,重写

Class类的使用

类的单实例模式