- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
class Singleton(object):
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kw)
return cls._instance
谁能详细解释这里发生的事情>> super(Singleton, cls)为了传递什么 cls 参数?
最佳答案
传递给__new__
方法的cls
属性是对Singleton
类的引用(cls == Singleton
),但是如果您将 Singleton
子类化并实例化该子类,则 cls
将改为对该子类的引用。
super
需要知道当前类(Singleton
)和它正在遍历的类层次结构的子类(cls
)来计算下一个类层次结构中的类,但在您的情况下,它们始终相同,因为 Singleton
没有任何子类。
为了详细说明为什么需要传递 cls
,我们假设这些类都有简单的传递 __new__
方法,这些方法简单地调用它们的 super 方法并返回结果。
class A(object): pass
class B(object): pass
class C(A, B): pass
然后C.__new__
调用super(C, cls).__new__
,相当于A.__new__
。现在,您希望 super(A, cls).__new__
等效于 B.__new__
,而不是 object.__new__
。但是 super
找到答案的唯一方法是被告知起点是 C
,而不是 A
。
因为在你的例子中唯一的父类(super class)是 object
,orig.__new__
等同于 object.__new__
,它被传递给 cls
以便它知道应该实例化哪个类。
关于python - super在单例中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15522162/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!