【发布时间】:2020-06-28 01:00:53
【问题描述】:
我知道元类可以代替类型并定义新创建的类的行为方式。
例如:
class NoMixedCase(type):
def __new__(cls,clsname,base,clsdict):
for name in clsdict:
if name.lower() != name:
raise TypeError("Bad name.Don't mix case!")
return super().__new__(cls,clsname,base,clsdict)
class Root(metaclass=NoMixedCase):
pass
class B(Root):
def Foo(self): #type error
pass
但是,有没有一种全局设置 NoMixedCase 的方法,所以无论何时创建一个新类,它的行为默认由 NoMixedCase 定义,而不必从 Root 继承?
如果你这样做了......
Class B:
def Foo(self):
pass
...它仍然会检查方法名称的大小写。
【问题讨论】:
-
import this:显式优于隐式。指定metaclass=...有什么问题? -
这种问题应该由 linter 程序解决,可能使用自定义插件,并在 git 提交时通过提交钩子进行验证。
-
今后,请始终使用通用 [python] 标签来解决所有与 python 相关的问题。自行决定使用特定于版本的标签。
-
即使这是可能的,它也会破坏标准库和您所依赖的第 3 方库中的所有内容。
标签: python python-3.x class metaclass