- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在一个项目中使用 init_subclass ,当我遇到内置方法时有点犹豫,当代码第一次在解释器中运行时启动——没有通过实例化直接引用包含类或它枚举的子类。
谁能告诉我这是怎么回事,并指出任何安全使用的例子?
class Timer():
def __init__(self):
pass
def __init_subclass__(cls):
print('Runner.', cls)
print('Timer Dictionary :', Timer.__dict__.keys())
# print(Timer.__init_subclass__()) # Forbidden fruit...
pass
class Event(Timer):
print("I'll take my own bathroom selfies...thanks anyway.")
def __init__(self):
print('This is nice, meeting on a real date.')
if __name__ == '__main__': # a good place for a breakpoint
date = Event()
date
编辑-------------------------------------------- ----
根据收到的解释,将原始代码重组为有用的东西。
class Timer():
subclasses = {}
def __init__(self):
pass
def __init_subclass__(cls, **kwargs):
print('Runner.', cls)
print('Timer Dictionary :', Timer.__dict__.keys())
# print(Timer.__init_subclass__()) # Forbidden fruit...
super().__init_subclass__(**kwargs)
cls.subclasses[cls] = []
class Event(Timer):
print("I'll take my own bathroom selfies...thanks anyway.")
def __init__(self):
print('This is nice, meeting on a real date.')
if self.__class__ in super().subclasses:
# get the index and link the two
super().subclasses[self.__class__].append(self)
if __name__ == '__main__': # a good place for a breakpoint
date = Event()
date
duty = Event()
duty
print(Timer.subclasses)
最佳答案
这是一个最小的例子:
class Super():
def __init_subclass__(cls):
print(cls)
class Sub(Super):
pass
运行这个:
$ python test.py
<class '__main__.Sub'>
这是为什么呢?根据Python's data model docs :
Whenever a class inherits from another class, init_subclass is called on that class.
Sub
继承自 Super
,因此 Super.__init_subclass__()
被调用。
具体来说,type_new()
invokes init_subclass在 cpython
实现中。
基本原理详见 PEP 487 .
关于python - 我应该害怕 __init_subclass__ 开始的方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51660663/
我写了一段代码只是为了了解 fread 的工作原理,但我不明白这是怎么可能的。这是我的代码: #include #include void main(){ char spool[5] =
我正在使用 fread 读取文件的第一个字节: fread(&example_struct, sizeof(example_struct), 1, fp_input); 在 linux 和 solar
如何代替 char text[10000]; 做 char text[fp_len]; 我也收到这个警告: warning: value computed is not used FILE *fp;
我有一个查询集,我需要懒惰地 pickle ,我遇到了一些严重的问题。 cPickle.dumps(queryset.query) 抛出以下错误: Can't pickle : it's not th
我是一名优秀的程序员,十分优秀!