回答

收藏

静态方法和类方法的区别

技术问答 技术问答 191 人阅读 | 0 人回复 | 2023-09-11

用@staticmethod装饰功能和装饰功能有什么区别?@classmethod?& C8 H8 @( [) Y
                                                               
9 m% P8 q8 J0 T  B, A    解决方案:                                                                0 q- e/ O* z  ^2 t2 o3 e
                                                                也许有些示例代码会有帮助:注意:foo,class_foo和调用签名的区别static_foo:2 p: _7 j! m/ H
    class A(object):    def foo(self,x):        print(f"executing foo({self},{x})")    @classmethod    def class_foo(cls,x):        print(f"executing class_foo({cls},{x})")    @staticmethod    def static_foo(x):        print(f"executing static_foo({x})")a = A()! ]/ K. U' b3 q: d2 t2 `7 s3 O
以下是调用对象实例的常用方法。对象实例 ,a作为第一个参数的隐藏传输。  w' `/ X4 h  q: e1 x  ]4 _4 E9 Q
    a.foo(1)# executing foo(,1)/ A& m; ?. n) S' I, |
使用 classmethods,对象实例的类作为第一个参数隐式传输,而不是self.
1 o' z. M+ |' D9 F. h: ?
    a.class_foo(1)# executing class_foo(,1)4 p/ y! c7 R; k
您也可以class_foo使用此类调用。事实上,如果你把某物定义为一种方法,那可能是因为你计划从类而不是从类实例中调用它。A.foo(1)会引起 TypeError,但A.class_foo(1)正常工作:
& o  ~& P; l% \, C! j2 D$ }
    A.class_foo(1)# executing class_foo(,1)
    & I& }3 i( ?6 o
使用 staticmethods,self(对象实例)和cls(类)不会作为第一个参数隐藏传输。它们的行为类似于普通函数,但你可以从实例或类中调用它们:
9 x# d, v4 q( s& u9 w
    a.static_foo(1)# executing static_foo(1)A.static_foo('hi')# executing static_foo(hi)
    / E6 X2 `' z- J  Y, I
静态方法用于分组与类有一定逻辑联系的函数。
9 l7 v* z0 z* b2 m$ z4 x5 [foo只是一个函数,但当你调用它时,你a.foo不仅会获得函数,还会获得函数的部分应用版本,并对象实例a绑定到函数的第一个参数。foo 2 参数,a.foo只需要 1 参数。
) h+ I" Y: g3 z, K$ d2 v! \6 C0 Ra绑定到foo. 这就是以下绑定一词的含义:7 D  Q' j# G) H4 J" _
    print(a.foo)# >% |- Y. R4 B# N
与a.class_foo,a不是绑定到class_foo,而是类A绑定到class_foo。
) s( ~6 W% ?+ B# j( Y4 }& }
    print(a.class_foo)# >
    ( _" d4 j* z8 m( k" x: b
这里使用静态方法,即使是一种方法a.static_foo回到一个没有参数绑定的好 ‘ole 函数。static_foo期待 1 参数, a.static_foo期望 1 参数。3 S) E0 N$ w( b% W7 b
    print(a.static_foo)#
    ( H5 ?5 ]8 H( g; k# @
当然,当你改变的时候static_foo同样的事情发生在与班级交谈时。A。: j# c) H* `: o- l3 ^6 ~# E
    print(A.static_foo)# 8 L5 {1 Y: j% |# C2 l
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则