有人可以向我解释@classmethod和@staticmethodpython中的含义吗?我需要知道差异和意义.
据我所知,@classmethod告诉一个类,它是一个应该继承到子类的方法,或者......某种东西.但是,重点是什么?为什么不在不添加@classmethod或定义@staticmethod任何@定义的情况下定义类方法?
tl; dr: 我应该何时使用它们,为什么要使用它们,我应该如何使用它们?
我在C++方面非常先进,所以使用更高级的编程概念应该不是问题.如果可能的话,请随意给我一个相应的C++示例.
我正在阅读有关函数在设置为类 atrributes 时如何成为绑定方法的内容。然后我观察到,对于 . 包装的函数来说情况并非如此functools.partial。对此有何解释?
简单的例子:
from functools import partial
def func1():
print("foo")
func1_partial = partial(func1)
class A:
f = func1
g = func1_partial
a = A()
a.f() # TypeError: func1() takes 0 positional arguments but 1 was given
a.g() # prints "foo"
Run Code Online (Sandbox Code Playgroud)
我有点期望他们都会有同样的行为方式。
我观察到至少有3种与Python 3中的函数相关的类型:
>>> class A():
... def f(): pass
...
>>> A.f
<function A.f at 0x7fcaef304268>
>>> A().f
<bound method A.f of <__main__.A object at 0x7fcaef2fae80
>>> set.union
<method 'union' of 'set' objects>
Run Code Online (Sandbox Code Playgroud)
我想知道'function','method'和'bound method'之间的区别是什么?'method'是否等同于Python 2中的'unbound method'?