python - 实例方法和类方法
实例方法指的是 只有实例对象才可以 调用的方法。
在类对象中定义实例方法时,第一个形参表示调用该方法的实例对象,其对应的实参由系统自动传入。
第一个形参的名称通常是 self ,self不是关键字,而是Python约定成俗的命名,你完全可以取别的名字,但建议这么做。
实例方法只能被实例对象所调用,有两种调用方式:
-
在类对象的内部
语法:self.方法名([实参]) -
在类对象外部
语法:实例对象.方法名([实参])
调用实例方法时,系统自动将调用该实例方法的实例对象作为实参传递给第一个形参。
第一个实参传递给第二个形参,第二个实参将会传给第三个形参,以此类推。
实例方法最大的特点就是最少要包含一个 self 参数,该self参数的作用是绑定调用此方法的实例对象。
class MyClass(object):
# 定义实例方法
def get_info(self, par1, par2):
print(par1, par2)
def get_other(self):
# 在类对象内部调用实例方法:get_info
self.get_info(1, 2)
# 实例化
res = MyClass()
res.get_info(3, 4)
res.get_other()
-
实例方法的第一个参数通常为self,它用来引用和调用实例。
-
在类中定义方法和定义普通的函数没有太大区别:
class People(object):
owner = "ren" # 类属性
def __init__(self, name, sex, age=18):
self.name = name # 实例属性
self.age = age # 实例属性
self.sex = sex
def voice(self): # 实例方法
print("我的名字是{},我{}岁了!".format(self.name, self.age))
p = People("张三", "女")
p.voice() # 我的名字是张三,我18岁了!
类方法
类方法指类对象中使用装饰器 @classmethod 进行装饰的方法。
在类对象定义类方法时,必须使用装饰器 @classmethod 进行装饰,第一个形参代表类对象,
其对应的实参由系统自动传入。
第一个形参的名称通常是 cls
类方法可以被类对象调用。
语法:类对象.方法名([]实参) 或者 self.方法名([实参])
调用类方法时,系统自动将类对象作为实参传递给第一个形参。
第一个实参传递给第二个形参...
class MyClass(object):
# 定义类方法
@classmethod
def func_a(cls, par1, par2):
print(par1, par2)
@classmethod
def func_b(cls):
# 通过类对象调用类方法
MyClass.func_a(1, 2) # 1 2
cls.func_a(1, 2) # 1 2
def get_info(self):
self.func_a(3, 4)
# 通过类对象调用类方法
# MyClass.func_a(8, 9) # 8 9
# 通过实例对象调用类方法
mc = MyClass()
# mc.func_a(4, 5) # 4 5
#
mc.func_b()
mc.get_info() # 3 4
汇总
实例方法
定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
调用:只能由实例对象调用。
类方法
定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);
调用:类和实例对象都可以调用。
-----分界线------
我们所看到的回报都有时间延时,
所以看不见的时候才需要信仰,
因为我们总是担心付出没有回报。