我正在寻找一种约定,说明如何在Python类定义中安排不同类型的方法(即@staticmethod
或@classmethod
)。 PEP-8不提供有关该主题的任何信息。
例如,Java编程语言有一些code conventions引用了静态变量和实例变量在类定义块中出现的顺序。 Python 3是否有任何宣布此类建议的标准?
我正在寻找一种约定,说明如何在Python类定义中安排不同类型的方法(即@staticmethod
或@classmethod
)。 PEP-8不提供有关该主题的任何信息。
例如,Java编程语言有一些code conventions引用了静态变量和实例变量在类定义块中出现的顺序。 Python 3是否有任何宣布此类建议的标准?
我认为在python上声明@staticmethod
和@classmethod
的方法是在函数的正上方添加该方法语句(@staticmethod
或@classmethod
)。@classmethod
的用法类似于实例函数,它需要一些参数,例如class
或cls
(u可以更改参数名称,由u决定)。
是否用于@static method
,不需要实例方法或类方法之类的self或class参数。这两个方法都绑定到该类而不是该类的对象上,因此@staticmethod
无法访问或修改该方法,因为@staticmethod
不知道该类的状态,而是{{1 }}可以访问或修改类状态,因为它可以访问(请在调用@classmethod
时查看cls参数),但请记住,如果u通过@classmethod
更改了某些状态,它将更改所有状态。该类的所有实例。
您可以在以下示例中看到差异。
示例:
@classmethod
有关更多说明,也许您可以看到此链接:
静态和类方法说明:link
类或静态变量说明:link
*我编辑了答案,因为我似乎没有回答您的问题
没有任何严格的规则/标准来安排它,幸运的是,在python中,您不必指定要定义的方法类型(在Java中,例如public void ...或private int ...等) )。
第一个顺序是类的名称,然后您可以像Java一样具有属性引用和实例化。 U也可以指定属性的范围(例如private等)。
然后,您可以通过声明@classmethod
def something(cls,arg1,arg2,....): #this is class method
@staticmethod
def something2(arg1,...): #this is static method
来像Java一样声明实例化。如果您声明实例化,则当您声明新的类实例时它将自动调用def __init__(self,...)
。如果不声明,python将继续调用此函数,因为它会自动从基类继承而不会做任何事情
之后,您可以声明函数。 U可以定义__init__
或instance method
或@classmethod
并执行某些操作。它的方法有其自身的优点,因此取决于您的需要。
Python也支持继承和多重继承。 有关更多说明,请参见此链接link。
希望有帮助。