我得到一个元类可以代替类型并定义新创建的类的行为。
例如:
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
...它仍然会检查方法名称的大小写。
问题来源:stackoverflow
关于您的问题,不,它不是通常的-甚至可能不是非常适合的方法-许多CPython的内部东西都与type
类绑定,并对其进行硬编码。
可以尝试在不立即使解释器崩溃的情况下尝试为type编写包装器。新的
和使用ctypes的直接在`类型更换它。新的广告位。(普通作业不会这样做)。您可能仍然会崩溃。
因此,在现实生活中,如果您决定不像我在上面的注释中建议的那样通过带有插件的Linter程序并提交钩子,那么方法是拥有一个使用您的元类的基类,并让所有人在您的项目中继承自该Base。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。