python中的实例方法、静态方法、类方法、类变量和实例变量

时间:2022-06-04 04:53:56

个人理解,若有误,望指正,多谢!

实例方法(obj_func)和实例变量(var)需要绑定到实例,实例方法可以调用实例变量、类变量和实例方法、静态方法、类方法

静态方法:静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作。使用装饰器@staticmethod定义静态方法。类对象和实例对象都可以调用静态方法。但是静态方法不能调用任何对象。

类方法是将类本身作为对象进行操作的方法。类方法使用@classmethod装饰器定义,其第一个参数是类,约定写为cls。类对象和实例都可以调用类方法、静态方法

class MyClass():
    cvar=12
    def __init__(self):
        self.var=self.stafunc()
    def obj_func(self):
        print "I'm a obj func"  print self.var,self.cvar
        self.classfunc()
        self.stafunc()
    @staticmethod
    def stafunc():
        print "I'm a static func"  return 2
    @classmethod
    def classfunc(cls):
        print "class var:%d"%cls.cvar
        cls.stafunc()
        #cls.obj_func() unbound method obj_func() must be called with MyClass instance as first argument (got nothing instead)  myobj=MyClass()
print myobj.var
myobj.obj_func()
myobj.stafunc()
myobj.classfunc()
print myobj.cvar
print MyClass.cvar
MyClass.stafunc()
MyClass.classfunc()
#print MyClass.var AttributeError: class MyClass has no attribute 'var' #MyClass.obj_func() unbound method obj_func() must be called with MyClass instance as first argument (got nothing instead) ''' I'm a static func 2 I'm a obj func 2 12 class var:12 I'm a static func I'm a static func I'm a static func class var:12 I'm a static func 12 12 I'm a static func class var:12 I'm a static func '''