一、property装饰器的使用
#property:将一个方法伪装成一个数据属性 #如果不用property装饰器的话,这个bmi值就需要用 obj.bmi() 来调取数值,这个看起来更像一个功能,而不像一个特征 #例1 # class People: # def __init__(self,name,height,weight): # self.name = name # self.height =height # self.weight = weight # # @property # def bmi(self): # return self.weight / (self.height ** 2) # # obj = People(‘egon‘,1.8,70) # print(obj.bmi) #例2 如果不使用property装饰器,则取到name 需要使用obj.name() 这看起来更像一个函数 #推荐使用这种方法 # class People: # def __init__(self,name): # self.__name = name # # @property #访问某个属性的操作 # def name(self): # return self.__name # # @name.setter #但凡被property装饰过的函数,才会出现.setter,该装饰器是用来 修改函数的值 # def name(self,value): # if type(value) is not str: # print(‘必须是字符串类型‘) # return # self.__name = value # # @name.deleter #删除某一个属性 # def name(self): # print(‘不可删除‘) # # obj = People(‘lich‘) # # print(obj.name) # print(obj.__dict__) # # obj.name = ‘egon‘ # print(obj.__dict__) # # print(obj.name) # # print(obj.__dict__) # # # # # # del obj.name #例3 property的古老使用方法(不推荐使用) class People: def __init__(self,name): self.__name = name def get_name(self): return self.__name def set_name(self,value): if type(value) is not str: print(‘必须str‘) return self.__name = value def del_name(self): del self.__name name = property(get_name,set_name,del_name) obj = People(‘lich‘) print(obj.name) obj.name = ‘egon‘ print(obj.__dict__) del obj.name print(obj.__dict__)
property,setter,deleter
二、绑定方法和非绑定方法
定义和格式:
‘‘‘ 绑定方法: 特殊之处:绑定给谁就应该由谁来调用,会将调用者(点左边的就是调用者)当作第一个参数自动传入 绑定对象的方法:类中定义的函数在没有被任何装饰器装饰的情况下,默认就是绑定给对象的 绑定对象的方法应该由对象来调用,自动传入的是对象 绑定类的方法:为类中定义的函数添加装饰器classmethod 绑定类的方法应该由类来调用,自动传入的是类 非绑定方法 特殊之处:无论类和对象谁来调用,都只是一个普通函数,没有自动传值的效果。 ‘‘‘ class People: def __init__(self,name,age): self.name = name self.age = age def tell_info(self): print(‘<%s:%s>‘%(self.name,self.age)) @classmethod #类来调用,会自动传入类,若对象来调用的话,仍然传入类 def func1(cls): print(cls) @staticmethod def func2(a,b): print(‘==========>‘,a,b) print(People.func1) obj = People(‘egon‘,19) print(obj.func1) obj.func1() obj.func2(‘obj1‘,‘obj2‘) People.func2(‘people1‘,‘people2‘) print(obj.func2) #只是普通函数 print(People.func2) #只是普通函数
staticmethod,classmethod
使用场景与方法:
原文地址:https://www.cnblogs.com/lich1x/p/10128813.html
时间: 2024-11-12 23:27:42