为了账号安全,请及时绑定邮箱和手机立即绑定

“StaticMethod”和“classMethod”的区别是什么?

“StaticMethod”和“classMethod”的区别是什么?

慕斯709654 2019-06-04 17:03:49
“StaticMethod”和“classMethod”的区别是什么?用@staticmethod还有一个装饰着@classmethod?
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

静态法是一个不知道它被调用的类或实例的方法。它只获取传递的参数,没有隐含的第一个参数。在Python中,它基本上是无用的-您可以只使用一个模块函数,而不是一个静态方法。

类方法另一方面,是作为第一个参数传递它被调用的类或被调用的实例的类的方法。当您希望方法成为类的工厂时,这是非常有用的:因为它获得了作为第一个参数调用的实际类,所以即使涉及到子类,也可以实例化正确的类。例如,观察dict.fromkeys(),类方法在子类上调用时返回子类的实例:

>>> class DictSubclass(dict):

...     def __repr__(self):

...         return "DictSubclass"

... 

>>> dict.fromkeys("abc")

{'a': None, 'c': None, 'b': None}

>>> DictSubclass.fromkeys("abc")

DictSubclass

>>> 


查看完整回答
反对 回复 2019-06-04
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

基本上@classmethod创建一个方法,其第一个参数是从它调用的类(而不是类实例),@staticmethod没有任何隐含的参数。


查看完整回答
反对 回复 2019-06-04
  • 3 回答
  • 0 关注
  • 688 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信