python - 如何避免在 python 中创建对象?

标签 python python-3.x

我是 python 编程的新手,我有一个类,我为这个类创建了一个对象(obj1)。除了这个对象,我不想创建其他对象,如果有人想为这个类再创建一个对象那应该只引用第一个对象(而不是再创建一个对象)。如何做到这一点?请引用下面的代码?

class MyClass:
   def __init__(self):
      pass
obj1=MyClass()//create object
obj2=MyClass()//avoid creation and refer obj2 to obj1
obj3=MyClass()//avoid creation and refer obj3 to obj1

最佳答案

所以你想要一些单例的东西?然后根本不要为此使用对象。只需将函数放在单独的模块(.py 文件)中,然后将变量放在模块范围内(例如全局变量)——如果不需要线程安全,这就是 pythonic 的方式来做你想做的事情。请记住:这不是 Java,对所有事物都使用类不是正确的方法。

但是,这里有一些代码只允许一个实例:

class MyClass:
    def __init__(self):
        if getattr(self.__class__, '_has_instance', False):
            raise RuntimeError('Cannot create another instance')
        self.__class__._has_instance = True

如果你想要单例,看看Python and the Singleton PatternIs there a simple, elegant way to define singletons?

关于python - 如何避免在 python 中创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10370951/

相关文章:

python - 如何在 Visual Studio Code 中运行调试 Django 应用程序?

python - 更改默认运行时 Serverless v1.0

python - pandas:识别条目中的第一个字符是字母还是数字

python - 如何使 tkinter Canvas 背景透明?

python - 如何将 (x,y) 对列表映射到 Pool.map 中的函数 f(x,y)?

python 3.6 : "AttributeError: ' SimpleQueue' object has no attribute '_poll' "

python pandas将数据框列拆分为两个新列并删除原始列

python - 覆盖模型上的 __getattr__ 会破坏 django-model-utils InheritanceManager

python - 如何用另一个列表元素随机替换列表元素?

python - Django 模型 TimeField views.py 无法选择小时或分钟