背景:今天在复习类相关知识的时候,突然想到这几种类型的方法的区别和用法,感觉有点模棱两可,于是总结一下,加深记忆。
定义:想要区别和理解几种方法,首先要定义一个类,要在类中加深理解和记忆。
先看一下实例属性和类属性的定义,有助于理解后面的几种方法。
# here put the import lib class Dogs(object): # 类属性 belongTo = "Animals" def __init__(self, name): #实例属性 self.name = name dog1 = Dogs("Sunny Chen")print(Dogs.belongTo) # 类属性通过类访问print(dog1.name) # 实例属性通过实例访问print(dog1.belongTo) #类属性也可以被实例访问# print(Dogs.name) # 但是实例属性无法被类访问
几种方法的区别:
一、类方法:
class CLanguage: #类构造方法,也属于实例方法 def __init__(self): self.name = "C语言中文网" self.add = "http://c.biancheng.net" #下面定义了一个类方法 @classmethod def info(cls): print("正在调用类方法",cls)
总结:类方法定义的时候需要用到装饰器(@classmethod),参数是cls,类方法可以使用类名直接调用,当然也可以使用实例对象来调用(通常不建议)。另外还有一点就是类方法是可以访问类属性的,但是无法访问实例属性。
二、实例方法:
class CLanguage: #类构造方法,也属于实例方法 def __init__(self): self.name = "C语言中文网" self.add = "http://c.biancheng.net" # 下面定义了一个say实例方法 def say(self): print("正在调用 say() 实例方法")
总结:实例方法定义的时候没有装饰器,第一个参数是self,实例方法不能由类直接调用,需要创建实例对象来调用,实例方法既可以改变类属性,也可以改变实例属性。
三、静态方法
#全局变量gloab_num=0class TestMothod: #类属性 name='ceshi01' target='test mothod' #实例属性,第一个参数是self def __init__(self,num,total,function): self.num=num self.total=total self.function=function @staticmethod def static_function(arg1,arg2): print(arg1,arg2) print(gloab_num)
总结:需要加装饰器(@staticmethod),参数没有限制,和正常的函数无异,只是无法访问类属性和实例属性,但是可以访问全局变量。既可以使用类调用静态方法也可以用实例对象调用静态方法。
静态方法是类中的”函数”。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。