作者:夕夕石(硕爷)
一、表格直观展示区别
-- | 实例调用 | 类调用 | 访问实例属性 | 访问类属性 |
---|---|---|---|---|
实例方法 | √ | √ | √ | |
类方法 | √ | √ | √ | |
静态方法 | √ | √ | √ |
二、逐个介绍
1、实例方法/对象方法
实例方法或者叫对象方法,指的是我们在类中定义的普通方法。
只有实例化对象之后才可以使用的方法,该方法的第一个形参接收的一定是对象本身
class Person:
def hello(self): # 实例方法
print("hello")
# 只能实例调用,不能类调用
p = Person() # 先要将类实例化。才能调用下面的实例方法
p.hello()
2、静态方法
(1) 格式:在方法上面添加 @staticmethod
(2) 参数:静态方法可以有参数也可以无参数
(3) 应用场景:一般用于和类对象以及实例对象无关的代码。
(4) 使用方式: 类名.类方法名(或者对象名.类方法名)。
定义一个静态方法
class Game:
@staticmethod
def menu(): # 静态方法,可以有参数,也可以没有参数
print('------')
print('开始[1]')
print('暂停[2]')
print('退出[3]')
# 两种调用都支持
Game.menu() # 这是类调用
Game().menu() # 这是实例调用
3、类方法
无需实例化,可以通过类直接调用的方法,但是方法的第一个参数接收的一定是类本身
(1) 在方法上面添加@classmethod
(2) 方法的参数为 cls 也可以是其他名称,但是一般默认为cls
(3) cls 指向 类对象
(4) 应用场景:当一个方法中只涉及到静态属性的时候可以使用类方法(类方法用来修改类属性)。
(5) 使用:可以是 对象名.类方法名。或者是 类名.类方法名
class Person:
type = '人类'
@classmethod
def test(cls):
print(cls.type)
# 两种调用都支持
Person.test() # 这是类调用
Person().test() # 这是实例调用
三、举例
class getMinNum():
class_pro = "class_pro" # class_pro这是类属性
def __init__(self, pro):
self.instance_pro = pro # instance_pro这是实例属性
def instance_fun(self): # instance_fun这是实例方法
print(getMinNum.class_pro) # 实例方法可以访问类属性
print(self.instance_pro) # 实例方法可以访问实例属性
# 类方法应用场景:类方法用来修改类属性
@classmethod
def class_fun(cls): # class_fun这是类方法
print(getMinNum.class_pro) # 类方法可以访问类属性
# print(self.instance_pro) 报错 # 类方法不能访问实例属性
# 静态方法应用场景:一般用于和类对象以及实例对象无关的代码
@staticmethod
def static_fun(): # static_fun这是静态方法(传不传参均可)
print(getMinNum.class_pro) # 静态方法可以访问类属性
# print(getMinNum.instance_pro) 报错 # 静态方法不能访问实例属性
作者:夕夕石(硕爷)
夕夕石微信
网友评论