调用对方的元类方法的最佳做法是什么?
我正在尝试构建一个元类,我只是在想我真的懂了它。我想为这个元类的每个实例都有类方法。调用对方的元类方法的最佳做法是什么?
class MyMeta(type): """A metaclass"""
def __new__(mcs, name, bases, attributes):
pass
def _foo(cls):
pass
def _bar(cls):
cls._foo()
当我在它上面运行pylint的,该cls._foo
有困难:
[pylint] E1120:No value for argument 'cls' in unbound method call
当我尝试运行的代码(我的代码是比这更复杂),这似乎是运行良好,并做我期待它做什么。那么我该如何解决这个问题呢?这究竟意味着什么。
这听起来像其他错误有关没有正确地声明为@staticmethods
东西,但我不能标记为@classmethod
因为那么它将是一个Metaclass方法。
相关搜索似乎是在讨论人们动态添加构造函数的地方,我不认为这是这种情况。我是否仍然对元类有所误解?
我真正想要的是在元类中定义的相互调用的类方法。有一个更好的方法吗?
回答:
[pylint的] E1120:在未绑定的方法调用的参数没有价值 'CLS'
至于你metaclasss而言,你的_foo
和_bar
方法都只是普通的Python方法 - 这意味着Python的将在调用这些方法时自动填充对每个类(元类实例)的引用。
而且,因为这是一个元类,为了清晰,语义和可读性,最好按照以下方式进行:将第一个参数命名为cls
而不是self
。
问题在于,pylint并没有提到这个问题:它很可能是一个硬编码的self
。 你的代码在这方面是无法理解的。
所有你需要做的就是添加一个元注释foylint忽略这些行 - 幸运的是,Pylint允许它在块级,不像一些工具,你必须在每一行标记。
class MyMeta(type): """A metaclass"""
# pylint: disable=no-value-for-parameter
def __new__(mcs, name, bases, attributes):
pass
def _foo(cls):
pass
def _bar(cls):
cls._foo()
您的示例元类,带有“元注释”,以便pylint忽略您的非错误。
以上是 调用对方的元类方法的最佳做法是什么? 的全部内容, 来源链接: utcz.com/qa/259517.html