今日内容
一、装饰器函数property
二、classmethod和staticmethod
三、isinstance和issunclass
一、装饰器函数property
property是一个装饰器函数,可以将一个方法伪装成属性
当一个方法被伪装成属性后,可以执行一个属性的增删改查(通过@方法名.setter和@方法名.deleter,下面的函数名一定要和方法名一样)
class Student: def __init__(self, name): self.__name = name @property def name(self): return self.__name @name.setter def name(self, new): # 必须传入一个参数, if type(new)is str: self.__name = new @name.deleter def name(self): print('111') ming = Student('小明') print(ming.__dict__) # {'_Student__name':'小明'} ming.name = '小红' print(ming.__dict__) # {'_Student__name':'小红'} ming.name = 123 print(ming.__dict__) # 修改不成功,还是{'_Student__name':'小红'} del ming.name # 打印了111
二、classmethod和staticmethod
1、classmethod:类方法,只使用类中的资源(方法与self无关),且这个西元可以通过类名引用进行使用,那么这个方法应该被改为类方法
例如:修改商品的折扣不需要通过对象
class Goods: __discount = 0.8 def __init__(self,name,price): self.name = name self.__price = price @property def price(self): return self.__price * Goods.__discount @classmethod def change_discount(cls,new): cls.__discount = new apple = Goods('apple',10) banana = Goods('banana',20) print(apple.price) # 8.0 Goods.change_discount(0.7) print(apple.price) # 7.0 print(banana.price) #14.0
2、staticmethod
在某些程序中,要求全部用面向对象,则普通的函数(不需要self和cls)也要定义在类里。这时可以用 @staticmethod。也叫静态方法,静态方法可以没有默认参数,其他方法有self或cls默认参数
例如选课系统中,学生类的登录问题
class Student: @staticmethod def login(): pass Student.login()
总结:
类:
静态属性:类,所有对象都统一拥有的属性
类方法:类,如果方法涉及到操作类方法、静态属性、静态方法,那么这个方法要被改为类方法,就是在方法上加上@classmethod,有默认参数cls
静态方法:普通方法,不使用类命名空间和对象命名空间,就是一个普通函数,定义时在函数前一行加上@ staticmethod,可以没有默认参数
方法:对象,有默认参数self
property方法:对象,有默认参数self