背景:今天在复习类相关知识的时候,突然想到这几种类型的方法的区别和用法,感觉有点模棱两可,于是总结一下,加深记忆。

定义:想要区别和理解几种方法,首先要定义一个类,要在类中加深理解和记忆。

先看一下实例属性和类属性的定义,有助于理解后面的几种方法。

# 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),参数没有限制,和正常的函数无异,只是无法访问类属性和实例属性,但是可以访问全局变量。既可以使用类调用静态方法也可以用实例对象调用静态方法。

静态方法是类中的”函数”。静态方法主要是用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有关系,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是个独立的、单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。