两个呈现的类之间有什么区别?它们的工作方式不同吗?

事物

Singleton 的这两种实现有什么区别。在父类中创建变量 _instance 是否使其与第二类不同?

class SingletonA(object):
    _instance = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = object.__new__(cls, *args, **kwargs)
        return cls._instance


class SingletonB(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, "_instance"):
            cls._instance = object.__new__(cls, *args, **kwargs)
        return cls._instance


# sample usage
class A(SingletonA):
    pass


print(A() == A()) #True
马丁·彼得斯

对于发布的代码,没有区别。

但是,如果您的子类实现__bool____len__,则第一个示例将失败,即使已设置实例也not self._instance可能返回True你真的想if self._instance is None:改用:

>>> class AlwaysFalse(object):
...     def __bool__(self): return False
...
>>> if not AlwaysFalse():
...     print("It doesn't exist? Should we create a new one?")
...
It doesn't exist? Should we create a new one?
>>> AlwaysFalse() is None
False

除此之外,差异是装饰性的。

您还想使用身份测试来检查单例实现是否正常工作;即使两个对象不同(因此不是单例),子类也可以实现该__eq__方法并返回True

>>> class EqualNotSingleton(object):
...     def __eq__(self, other): return True
...
>>> EqualNotSingleton() == EqualNotSingleton()
True
>>> EqualNotSingleton() is EqualNotSingleton()
False

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

这两个循环之间有什么区别吗?

来自分类Dev

以下两个声明之间有什么区别以及何时应使用它们

来自分类Dev

这两个媒体查询之间有什么区别?

来自分类Dev

这两个代码委派示例之间有什么区别

来自分类Dev

这两个if之间有什么区别?

来自分类Dev

这两个格式字符串的结果之间有什么区别吗?

来自分类Dev

F#中这两个函数之间有什么区别吗?

来自分类Dev

这两个c#抽象类之间有什么区别?

来自分类Dev

这两个Clojure函数之间有什么区别和问题?

来自分类Dev

这两个比较之间有什么区别?

来自分类Dev

这两个匿名类声明之间有什么区别

来自分类Dev

这两个语句之间有什么区别?

来自分类Dev

这两个C函数调用之间有什么区别?

来自分类Dev

这两个monad变压器之间有什么区别?

来自分类Dev

for循环的两个代码之间有什么区别?

来自分类Dev

for循环的两个代码之间有什么区别?

来自分类Dev

jQuery两个.get()函数的工作方式不同

来自分类Dev

以下两个声明之间有什么区别?

来自分类Dev

这两个配置选项之间有什么区别吗?

来自分类Dev

两个不同版本的VLC夜间构建之间有什么区别?

来自分类Dev

在C中具有相同大小的两个不同类型之间有什么区别?

来自分类Dev

这两个循环之间有什么区别吗?

来自分类Dev

F#中这两个函数之间有什么区别吗?

来自分类Dev

这两个类实例之间有什么区别?

来自分类Dev

为什么GE0有两个端口?它们之间有什么区别?

来自分类Dev

这两个Angular控制器之间在功能上有什么区别吗

来自分类Dev

这些查询及其工作方式有什么区别?

来自分类Dev

这两个代码之间有什么区别吗?

来自分类Dev

这两个代码有什么区别吗?

Related 相关文章

  1. 1

    这两个循环之间有什么区别吗?

  2. 2

    以下两个声明之间有什么区别以及何时应使用它们

  3. 3

    这两个媒体查询之间有什么区别?

  4. 4

    这两个代码委派示例之间有什么区别

  5. 5

    这两个if之间有什么区别?

  6. 6

    这两个格式字符串的结果之间有什么区别吗?

  7. 7

    F#中这两个函数之间有什么区别吗?

  8. 8

    这两个c#抽象类之间有什么区别?

  9. 9

    这两个Clojure函数之间有什么区别和问题?

  10. 10

    这两个比较之间有什么区别?

  11. 11

    这两个匿名类声明之间有什么区别

  12. 12

    这两个语句之间有什么区别?

  13. 13

    这两个C函数调用之间有什么区别?

  14. 14

    这两个monad变压器之间有什么区别?

  15. 15

    for循环的两个代码之间有什么区别?

  16. 16

    for循环的两个代码之间有什么区别?

  17. 17

    jQuery两个.get()函数的工作方式不同

  18. 18

    以下两个声明之间有什么区别?

  19. 19

    这两个配置选项之间有什么区别吗?

  20. 20

    两个不同版本的VLC夜间构建之间有什么区别?

  21. 21

    在C中具有相同大小的两个不同类型之间有什么区别?

  22. 22

    这两个循环之间有什么区别吗?

  23. 23

    F#中这两个函数之间有什么区别吗?

  24. 24

    这两个类实例之间有什么区别?

  25. 25

    为什么GE0有两个端口?它们之间有什么区别?

  26. 26

    这两个Angular控制器之间在功能上有什么区别吗

  27. 27

    这些查询及其工作方式有什么区别?

  28. 28

    这两个代码之间有什么区别吗?

  29. 29

    这两个代码有什么区别吗?

热门标签

归档