接下来就给大家详细的介绍这 3 种类方法。其中 @classmethod 和 @staticmethod 都是函数装饰器,后续章节会对其做详细介绍。
class CLanguage: #类构造方法,也属于实例方法 def __init__(self): self.name = "C语言中文网" self.add = "http://c.biancheng.net" # 下面定义了一个say实例方法 def say(self): print("正在调用 say() 实例方法")实例方法最大的特点就是,它最少也要包含一个 self 参数,用于绑定调用此方法的实例对象(Python 会自动完成绑定)。实例方法通常会用类对象直接调用,例如:
clang = CLanguage() clang.say()运行结果:
正在调用 say() 实例方法
当然,Python 也支持使用类名调用实例方法,但此方式需要手动给 self 参数传值。例如:#类名调用实例方法,需手动给 self 参数传值 clang = CLanguage() CLanguage.say(clang)运行结果为:
正在调用 say() 实例方法
有关使用类名直接调用实例方法的更多介绍,可阅读《Python类调用实例方法》一节。
和 self 一样,cls 参数的命名也不是规定的(可以随意命名),只是 Python 程序员约定俗称的习惯而已。
和实例方法最大的不同在于,类方法需要使用@classmethod
修饰符进行修饰,例如:
class CLanguage: #类构造方法,也属于实例方法 def __init__(self): self.name = "C语言中文网" self.add = "http://c.biancheng.net" #下面定义了一个类方法 @classmethod def info(cls): print("正在调用类方法",cls)
类方法推荐使用类名直接调用,当然也可以使用实例对象来调用(不推荐)。例如,在上面 CLanguage 类的基础上,在该类外部添加如下代码:注意,如果没有 @classmethod,则 Python 解释器会将 fly() 方法认定为实例方法,而不是类方法。
#使用类名直接调用类方法 CLanguage.info() #使用类对象调用类方法 clang = CLanguage() clang.info()运行结果为:
正在调用类方法 <class '__main__.CLanguage'>
正在调用类方法 <class '__main__.CLanguage'>
@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")运行结果为:
C语言中文网 http://c.biancheng.net
Python教程 http://c.biancheng.net/python
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有