python - 实例方法和类方法

实例方法指的是 只有实例对象才可以 调用的方法。

在类对象中定义实例方法时,第一个形参表示调用该方法的实例对象,其对应的实参由系统自动传入。

第一个形参的名称通常是 self ,self不是关键字,而是Python约定成俗的命名,你完全可以取别的名字,但建议这么做。

实例方法只能被实例对象所调用,有两种调用方式:

  1. 在类对象的内部

    语法:self.方法名([实参])

  2. 在类对象外部

    语法:实例对象.方法名([实参])

调用实例方法时,系统自动将调用该实例方法的实例对象作为实参传递给第一个形参。

第一个实参传递给第二个形参,第二个实参将会传给第三个形参,以此类推。

实例方法最大的特点就是最少要包含一个 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()

  1. 实例方法的第一个参数通常为self,它用来引用和调用实例。

  2. 在类中定义方法和定义普通的函数没有太大区别:

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”,通过它来传递类的属性和方法(不能传实例的属性和方法);

调用:类和实例对象都可以调用。

-----分界线------

我们所看到的回报都有时间延时,

所以看不见的时候才需要信仰,

因为我们总是担心付出没有回报。