背景:今天在复习类相关知识的时候,突然想到这几种类型的方法的区别和用法,感觉有点模棱两可,于是总结一下,加深记忆。
定义:想要区别和理解几种方法,首先要定义一个类,要在类中加深理解和记忆。
先看一下实例属性和类属性的定义,有助于理解后面的几种方法。
# 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=0
class 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),参数没有限制,和正常的函数无异,只是无法访问类属性和实例属性,但是可以访问全局变量。既可以使用类调用静态方法也可以用实例对象调用静态方法。
静态方法是类中的"函数”。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。