Python实例方法、静态方法和类方法详解(包含区别和用法)
和类属性的分类不同,对于初学者来说,区分这 3 种类方法是非常简单的,即采用 @clasethod 修饰的方法为类方法;采用 @staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法。
接下来就给大家详细的介绍这 3 种类方法。其中 @clasethod 和 @staticmethod 都是函数装饰器,后续章节会对其做详细介绍。
Python类实例方法
通常情况下,在类中定义的方法默认都是实例方法。前面章节中,我们已经定义了不只一个实例方法。不仅如此,类的构造方法理论上也属于实例方法,只不过它比较特殊。比如,下面的类中就用到了实例方法:
class CLanguage:
#类构造方法,也属于实例方法
def __init__(self):
self.name = "C语言中文网"
self.add = "http://c.biancheng网站站点" rel="nofollow" />
clang = CLanguage()
clang.say()
运行结果:
正在调用 say() 实例方法
当然,Python 也支持使用类名调用实例方法,但此方式需要手动给 self 参数传值。例如:
运行结果为:#类名调用实例方法,需手动给 self 参数传值
clang = CLanguage()
CLanguage.say(clang)
正在调用 say() 实例方法
有关使用类名直接调用实例方法的更多介绍,可阅读《Python类调用实例方法》一节。
Python类方法
Python 类方法和实例方法相似,它最少也要包含一个参数,只不过类方法中通常将其名为 cls,Python 会自动将类本身绑定给 cls 参数(注意,绑定的不是类对象)。也就是说,我们在调用类方法时,无需显式为 cls 参数传参。和 self 一样,cls 参数的名也不是规定的(可以随意名),只是 Python 程序员约定俗称的习惯而已。
和实例方法的不同在于,类方法需要使用@clasethod
修饰符进行修饰,例如:class CLanguage:
#类构造方法,也属于实例方法
def __init__(self):
self.name = "C语言中文网"
self.add = "http://c.biancheng网站站点" rel="nofollow" />
不)。例如,在上面 CLanguage 类的基础上,在该类外部添加如下代码: #使用类名直接调用类方法
CLanguage.info()
#使用类对象调用类方法
clang = CLanguage()
clang.info()
运行结果为:
正在调用类方法 <class '__main__.CLanguage'>
正在调用类方法 <class '__main__.CLanguage'>
Python类静态方法
静态方法,其实就是我们学过的函数,和函数的区别是,静态方法定义在类这个空间(类名空间)中,而函数则定义在程序所在的空间(全局名空间)中。
静态方法没有类似 self、cls 这样的特殊参数,因此 Python 解释器不会对它包含的参数做任何类或对象的绑定。也正因为如此,类的静态方法中无法调用任何类属性和类方法。
静态方法需要使用@staticmethod
修饰,例如:class CLanguage:
@staticmethod
def info(name,add):
print(name,add)
静态方法的调用,既可以使用类名,也可以使用类对象,例如:
#使用类名直接调用静态方法
CLanguage.info("C语言中文网","http://c.biancheng网站站点" rel="nofollow" />
C语言中文网 http://c.biancheng网站站点" rel="nofollow" />