python实例方法、类方法和静态方法

目录

一、实例方法(也叫对象方法)

二、静态方法

三、类方法


一、实例方法(也叫对象方法)

实例方法或者叫对象方法,指的是我们在类中定义的普通方法。

只有实例化对象之后才可以使用的方法,该方法的第一个形参接收的一定是对象本身!

class Dog():

    def eat(self):
        print('吃骨头。。。')

二、静态方法

(1).格式:在方法上面添加 @staticmethod

(2).参数:静态方法可以有参数也可以无参数

(3).应用场景:一般用于和类对象以及实例对象无关的代码。

(4).使用方式:  类名.类方法名(或者对象名.类方法名)。

class People:

    # 静态方法 使用@staticmethod修饰符定义
    @staticmethod
    def eat():
        print('吃饭...')

People.eat() # 调用无需实例化

练习1:定义一个静态方法menu() 

class Game:

    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 静态方法
    @staticmethod
    def mune():
        print('开始按钮【1】')
        print('跳过按钮【2】')
        print('退出按钮【0】')

# 使用类名调用
Game.mune()
# 使用对象调用
game = Game('三目童子', 23)
game.mune()
'''
开始按钮【1】
跳过按钮【2】
退出按钮【0】
'''

三、类方法

无需实例化,可以通过类直接调用的方法,但是方法的第一个参数接收的一定是类本身

(1).在方法上面添加@classmethod

(2).方法的参数为 cls 也可以是其他名称,但是一般默认为cls

(3).cls 指向 类对象(也就是Goods)

(5).应用场景:当一个方法中只涉及到静态属性的时候可以使用类方法(类方法用来修改类属性)。

(5).使用可以是对象名.类方法名.或者是 类名.类方法名

class People:
    role = '人类'

    @classmethod
    def test02(cls):
        '''cls参数是类对象,指向类对象本身'''
        print(cls.role) # 使用类属性


# 类名也是类对象
print(People.role) # 人类
# 调用类方法
People.test02() # 人类
# 对象也可以调用
p = People()
p.test02() # 人类

练习1:使用类方法对商品进行打折扣 

class Goods:

    def __init__(self, name, price):
        self.name = name
        self.__price = price
        self.__discount = 1
    # 实际价格
    @property
    def price(self):
        return self.__price * self.__discount

    # 改变折扣价
    # 普通方法:
    # def change_discount(self,new_discount):
    #     self.__discount = new_discount
    @classmethod
    def change_discount(cls, new_discount):
        Goods.__discount = new_discount

    def test(self):
        print('xxx')

(1)给苹果和香蕉打八折

appleX = Goods('苹果',10)
appleX.change_discount(0.8)
print(appleX.price) # 8.0

banana = Goods('香蕉',20)
banana.change_discount(0.8)
print(banana.price) # 16.0

内存分配图:  

python实例方法、类方法和静态方法_第1张图片

(2)全场打八折

class Goods:
    __discount = 1

    def __init__(self, name, price):
        self.name = name
        self.__price = price

    # 实际价格
    @property
    def price(self):
        return self.__price * self.__discount

    # 改变折扣价
    # 普通方法:
    # def change_discount(self,new_discount):
    #     self.__discount = new_discount
    @classmethod
    def change_discount(cls, new_discount):
        Goods.__discount = new_discount

    def test(self):
        print('xxx')
Goods.change_discount(0.8)
banana = Goods('香蕉', 20)
print(banana.price) # 16.0
appleX = Goods('苹果', 10)
print(appleX.price) # 8.0

内存分配图: 

python实例方法、类方法和静态方法_第2张图片

你可能感兴趣的:(IT,python学习之路,python)