python类的三种方法
类实例方法
通常情况下,在类中定义的方法都默认为实例方法,即使是实例方法理论上也属于实例方法,只不过比较特殊
实例方法的最大特点就是至少要包含一个self
函数(实例方法的名称也许就来源于此,self表示的是实例化的对象),用于绑定调用此方法的实例对象(python会自动完成绑定)。
实例方法通常会用类的实例对象直接调用:
class CLanguage():
def say(self):
print("正在调用 say() 实例方法")
clang = CLanguage()
clang.say()
也支持使用类名调用实例方法,这种方式需要手动给self传参数
clang = CLanguage()
CLanguage.say(clang)
类方法
类方法和实例方法相似,它至少要要包含一个参数,只不过类方法种通常将其命名cls
,python会自动将类模板本身绑定给cls参数,而不是类的对象(实例),也就是我们在调用类方法时候,不需要显式的给cls
传参。与self
相同,cls
的命名也不是规定的,只是约定俗成
与实例方法的最大的不同在于,类方法需要@classmethod
修饰符修饰
类方法推荐使用类名直接调用,虽然可以用实例对象但是不推荐。
class CLanguage:
#类构造方法,也属于实例方法
def __init__(self):
self.name = "C语言中文网"
self.add = "http://c.biancheng.net"
#下面定义了一个类方法
@classmethod
def info(cls):
print("正在调用类方法",cls)
#使用类名直接调用类方法
CLanguage.info()# 正在调用类方法
#使用类对象调用类方法
clang = CLanguage()
clang.info()# 正在调用类方法
类静态方法
静态方法就是我们学过的函数,但是区别在于静态方定义在类这个空间(类命名空间)种,而函数定义在程序所在的空间(全局命名空间)种
静态方法没有类似cls
、self
这样的特殊参数,python解释器不会对它包含的参数做任何类或者对象的绑定。正因为这样,类静态方法无法调用任何类属性和类方法
需要@staticmethod
修饰符修饰
调用可以用类名也可以用实例对象
class CLanguage:
@staticmethod
def info(name,add):
print(name,add)
#使用类名直接调用静态方法
CLanguage.info("C语言中文网","http://c.biancheng.net")
#使用类对象调用静态方法
clang = CLanguage()
clang.info("Python教程","http://c.biancheng.net/python")
实际中几乎不会用到类方法和静态方法,因为可以用函数代替他们试下想要的功能
本文是对python类中的三种方法进行了学习