1、实例方法/对象方法
实例方法或者叫对象方法,指的是我们在类中定义的普通方法。
只有实例化对象之后才可以使用的方法,该方法的第一个形参接收的一定是对象本身!
class Person:
def func(self):
print('hello')
person = Person()
person.func()
运行结果;
hello
静态方法:
(1).格式:在方法上面添加 @staticmethod
(2).参数:静态方法可以有参数也可以无参数
(3).应用场景:一般用于和类对象以及实例对象无关的代码。
(4).使用方式: 类名.类方法名(或者对象名.类方法名)。
class Dog:
role ='狗' # 静态属性
def test(self):
# 做一些逻辑操作
pass
@staticmethod 定义 test2为静态方法,在此方法体内只能通过类对象或者cls来调用静态属性即(cls.role 或者 Dog.role)
def test2(cls):
'''cls参数是类对象指向类对象本身也就是Dog'''
print(cls.role)
print(Dog.role) # 直接使用类名也可以直接调用
# Dog是类名也是类对象
print(Dog.role) 类对象直接调用方法test2 # 二哈
# 类调用类方法
Dog.test2() #类对象调用方法 test2
# 实例对象调用类方法
dog=Dog()
dog.test2() # 实例对象调用方法test2
运行结果:
二哈
二哈
二哈
二哈
二哈
3、类方法
无需实例化,可以通过类直接调用的方法,但是方法的第一个参数接收的一定是类本身
(1).在方法上面添加@classmethod
(2).方法的参数为 cls 也可以是其他名称,但是一般默认为cls
(3).cls 指向 类对象(也就是Goods)
(5).应用场景:当一个方法中只涉及到静态属性的时候可以使用类方法(类方法用来修改类属性)。
(5).使用 可以是 对象名.类方法名。或者是 类名.类方法名
练习1:使用类方法对商品进行打折扣
全场打八折
class Goods:
__discount = 1 # 静态属性(类属性),实例对象都可以直接调用
def __init__(self,name,price):
self.name=name
self.__price=price
@property #将方法变为属性
def price(self):
return self.__price*self.__discount
@classmethod #一个方法里面只有静态属性,可以将这个方法变为类方法
def change_discount(cls,new_discount):
cls.__discount=new_discount
# 苹果香蕉各打八折
# 苹果打八折
applex=Goods('苹果',10,)
applex.change_discount(0.8) # 相当于重新在自己内部创建了
# 一个属性 apple.__discount=0.8,调用类里面的方法def price(self)时
# 用的self.__discount就是自己创建的apple.__discount=0.8,不再使用
# 类里面的静态属性,但是此种方法较为繁琐。
print(applex.price) #8.0
#香蕉打七折
banana=Goods('进口香蕉',20)
banana.change_discount(0.8 )
print(banana.price) #16.0
#全场八折
Goods.change_discount(0.8) # 类对象调用类方法直接修改了静态属性的值,
# 其他实例对象在调用此静态队形的时候,就不用再进行专门的修改。
applex=Goods('苹果',10,)
print(applex.price) #8.0
banana=Goods('进口香蕉',20)
print(banana.price) #16.0