调用对方的元类方法的最佳做法是什么?

我正在尝试构建一个元类,我只是在想我真的懂了它。我想为这个元类的每个实例都有类方法。调用对方的元类方法的最佳做法是什么?

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

回到顶部