我正在寻找一个约定,说明如何在Python类定义中安排不同类型的方法(即@staticmethod
或@classmethod
)。 PEP-8不提供有关该主题的任何信息。
例如,Java编程语言有一些code conventions指代静态变量和实例变量在类定义块中出现的顺序。 Python 3是否有任何宣布此类建议的标准?
[我认为在python上声明@staticmethod
和@classmethod
的方法是在函数的正上方添加该方法语句(@staticmethod
或@classmethod
)。 @classmethod
的用法类似于实例函数,它需要一些参数,例如class
或cls
(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 ...等) )。
首先是类的名称,然后您可以像Java一样具有属性引用和实例化。 U也可以指定属性的范围(例如private等)。
然后,您可以像声明Java一样通过声明def __init__(self, ...)
来声明实例化。如果您声明实例化,则当您声明新的类实例时它将自动调用__init__
。如果您未声明,python将继续调用此函数,因为它会自动从基类继承而不会做任何事情
之后,您可以声明函数。 U可以定义instance method
或@classmethod
或@staticmethod
并执行某些操作。它的方法有其自身的优点,因此取决于您的需要。
Python也支持继承和多重继承。有关更多说明,请参见此链接link。
希望有帮助。