Python静态方法定义的位置

问题描述 投票:2回答:1

我正在寻找一个约定,说明如何在Python类定义中安排不同类型的方法(即@staticmethod@classmethod)。 PEP-8不提供有关该主题的任何信息。

例如,Java编程语言有一些code conventions指代静态变量和实例变量在类定义块中出现的顺序。 Python 3是否有任何宣布此类建议的标准?

python-3.x conventions pep8
1个回答
-1
投票

[我认为在python上声明@staticmethod@classmethod的方法是在函数的正上方添加该方法语句(@staticmethod@classmethod)。 @classmethod的用法类似于实例函数,它需要一些参数,例如classcls(u可以更改参数名称,因此取决于u)。对于@static method,它不需要self或class参数,例如实例方法或class方法。这两种方法都绑定到该类而不是该类的对象,因此@staticmethod无法访问或修改该方法,因为@staticmethod不知道该类的状态,但是对于@classmethod可以访问或修改类状态,因为它可以访问(请在调用@classmethod时查看cls参数),但是请记住,如果u通过@classmethod更改了某些状态,它将更改该类所有实例的所有状态。您可以在以下示例中看到差异。

示例:

@classmethod
def something(cls, arg1, arg2, ....): #this is class method

@staticmethod
def something2(arg1, arg2, ...):   #this is static method

有关更多说明,也许您可​​以看到以下链接:静态和类方法说明:link类或静态变量说明:link

*我编辑了我的答案,因为我似乎没有回答你的问题没有任何严格的规则/标准来安排它,幸运的是在python中,您不必指定要定义的方法类型(在Java中,例如public void ...或private int ...等) )。

  1. 班级名称

首先是类的名称,然后您可以像Java一样具有属性引用和实例化。 U也可以指定属性的范围(例如private等)。

  1. 实例

然后,您可以像声明Java一样通过声明def __init__(self, ...)来声明实例化。如果您声明实例化,则当您声明新的类实例时它将自动调用__init__。如果您未声明,python将继续调用此函数,因为它会自动从基类继承而不会做任何事情

  1. 功能/方法

之后,您可以声明函数。 U可以定义instance method@classmethod@staticmethod并执行某些操作。它的方法有其自身的优点,因此取决于您的需要。

Python也支持继承和多重继承。有关更多说明,请参见此链接link

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.