首页 > 编程知识 正文

python类方法怎么调用,类的静态成员函数

时间:2023-05-06 20:30:42 阅读:61206 作者:3479

Python :常规成员函数、类成员函数和静态函数Python类也是常见对象。 如果要将类作为参数传递给其他函数,或者希望在实例化类之前提供某些功能,则使用classmethod和staticmethod是最简单的方法。 两者的区别在于有类继承时对多态性的支持不同。 因此,在本质上,实例方法在面向对象中有什么作用,而classmethod也有什么作用。 但是,这个面向对象的“对象”就是类本身。 c的静态方法只是命名空间,但在Python中,无论是classmethod还是static method,都是OOP (面向对象编程、对象定向编程)、多类型的

class foo : def plain _ func (self ) :#常规方法print(plain_func ) @classmethoddefclass_func ) cls ) 3360 #类方法plaint 静态方法print ) ' static_func ' )必须实例化并调用foo=Foo ) foo.plain_func )。 可以按类名进行。常规成员函数常规成员函数是最常用的方法,从调用方法来看,常规函数只能在类的实例中调用,然后两者都可以按类名调用。

classkls(object ) :def_init_(self,data ) : self.data=datadefprintd (self ) 3360 print (self.data ) )

2、类成员函数(classmethod ) classmethod添加了引用类实例的cls参数。 cls类似于类中其他函数的self参数,例如__init__(self ),但self表示创建的实例对象,而cls表示类本身。 classmethod可用于描述只在类中运行而不在实例中运行的方法。 直接从类调用的无论是从实例调用还是从类调用,此方法都使用第一个参数传递类。类的用户可见功能可以使用classmethod

好处:

方法可以确定自己是在基类中调用还是在某个子类中调用。如果从子类调用方法,则该方法可以返回子类的实例而不是基类的实例;如果从子类调用,则方法#类代码扩展后的关系位于类定义之外,今后, 代码defget_no_of_instances(cls_obj ) : return cls _ obj.no _ instclasskls ) object ) 3360 no _ inst=0de ekls o _ of _ instances (kls ) )从类中调用2 defint 3360 return ins _ obj._ _ class _.no _ instclasskls (object ) 3360 ns 从3330 printig et _ no _ of _ instance (ik1 )实例调用2 ) classmethodclasskls ) object ) : no _ inst=0def _ ininst efget_no_of_instance(cls_obj ) 3360 return cls _ obj.nstance print ik1. get _ no _ of _ instance (从#实例

3、静态函数静态方法是与类相关的功能,如更改环境变量或更改其他类的属性,但在运行时不需要实例或类的参与。 从类调用时,静态方法和类方法对调用方来说是不可区分的。

好处:

调用时返回的是真函数,每次调用都返回相同的实例。 classmethod为基类和子类返回不同的bound method实例。 #也扩展类内部的代码。 ind=' on ' defcheckind (: return ) ind=='on ' ) classkls ) object (: def _ _ init _ ) self, data ) 3360 self.data=datadefdo _ reset (self ) : if checkind ) :print('resetdonefor: ', self.data(defset_db ) self ) : if checkind ) : self.db=' newdb connection ' print ) dbconnectionmadefor 3336666 self for: 12 ik1.set_db ) ) DB connection made for: 12#使用Statata : def __init__(self, data (3360 self.data=data @ staticmethoddefcheckind ) ) :return(ind=='on ' ) defdo _ reset (self ) 3360 if sell 33650 自.数据) defset _ db (自) : if self.checkind ) : self.db=' newdb connection ' print ) db connnection made self

classmethod和staticmethod这两种方法的用法相似,大多数情况下classmethod可以用staticmethod代替,staticmethod也可以在子类中改写为classmethod

classkls(object ) :def__init__ ) self, data ) : self.data=datadefprintd (self ) :print(self.data ) staticmethoddefsmethod(* arg ) 3360打印) ) ' staticmethoddefsmethod ) ) arg arg ) @classmethoddefcmethod(*arg ) :打印) ' class 3360 ',arg ) kls.print d (类型: unboundmethodprintd ) mustbecalledwithklsinstanceasfirstargument ) gotnothinginstead ) kls static 333 __main_.kls ',) Python的classmethod和staticmethod有什么具体用途?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。