目录
一、实例方法(也叫对象方法)
二、静态方法
三、类方法
实例方法或者叫对象方法,指的是我们在类中定义的普通方法。
只有实例化对象之后才可以使用的方法,该方法的第一个形参接收的一定是对象本身!
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
内存分配图:
(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
内存分配图: