开发者社区> 问答> 正文

是否可以全局设置元类,使其适用于默认情况下创建的所有类?

我得到一个元类可以代替类型并定义新创建的类的行为。

例如:

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

展开
收起
is大龙 2020-03-24 14:42:34 343 0
1 条回答
写回答
取消 提交回答
  • 关于您的问题,不,它不是通常的-甚至可能不是非常适合的方法-许多CPython的内部东西都与type类绑定,并对其进行硬编码。

    可以尝试在不立即使解释器崩溃的情况下尝试为type编写包装器。新的和使用ctypes的直接在`类型更换它。新的广告位。(普通作业不会这样做)。您可能仍然会崩溃。

    因此,在现实生活中,如果您决定不像我在上面的注释中建议的那样通过带有插件的Linter程序并提交钩子,那么方法是拥有一个使用您的元类的基类,并让所有人在您的项目中继承自该Base。

    回答来源:stackoverflow

    2020-03-24 14:44:45
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
对象的生命期管理 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载