静态属性 类的绑定方法 静态方法
静态属性property作用
print(property) # <class 'property'> 伪装方法为属性的案例
身高或体重是不断变化的,因而每次想查看 class People: def __init__(self,name,weight,height): self.name = name self.weight = weight self.height = height @property def bmi(self): """BMI在18.bai5至24.9时属正常范围,BMI大于25为超重du,BMI大于30为肥胖。zhi""" return self.weight / (self.height**2) obj=People('lili',75,1.85) print(obj.bmi) 21.913805697589478 看起来是在调用实例属性,实际上是拿到的实例绑定方法处理完毕后的结果。 控制属性的增删改查案例Foo: __name = name @property 当用户访问 obj.name 发生的事... name(self): return "你的偶像:[{0}],永远滴神...".format(self.__name) 可以看到返回的是 __name @name.setter 当用户设置 obj.name 发生的事儿... name(self,value): val = UZI" if value != val or value != ": print(乌兹!永远的神!不允许修改其他值!) else: self. val @name.deleter 当用户删除 obj.name 发生的事儿... 不允许删除!) f1 = Foo(乌兹") 开始设置,相当于增..触发 @name.setter 下的函数运行 print(f1.name) 访问时候触发 @property 下的函数运行 f1.name = " 修改设置.. 触发 @name.setter 下的函数运行 bang" 设置的是bang,不会成功,触发 @name.setter 下的函数运行 del f1.name 删除时候触发 @name.deleter 下的函数运行 ==== 执行结果 ==== 你的偶像:[乌兹],永远滴神... 你的偶像:[UZI],永远滴神... 乌兹!永远的神!不允许修改其他值! 不允许删除! """ name get_name(self): 当用户访问 obj.name 发生的事... 可以看到返回的是 __name set_name(self,value): 当用户设置 obj.name 发生的事儿...""" val = val del_name(self): 用户删除 obj.name 发生的事儿...) name123 = property(get_name,set_name,del_name) 第一个位置是获取,第二个位置是设置与新增,第三个位置是删除 ==== 注意 : 下面全部要改成 name123 ==== f1 = Foo( 开始设置..相当于增,触发 set_name的函数运行 print(f1.name123) 访问时候触发 get_name 的函数运行 f1.name123 = 修改设置.. 触发 set_name 的函数运行 del f1.name123 删除时候触发 del_name 的函数运行 """ 目前,就了解这两个即可。实际上关于 类的绑定方法classmethod作用
类的绑定方法实例需求:打印该类下的所有类属性 School(object): name = 学校类 addr = 任意地方 nature = 虚拟" name @classmethod def show_attr(cls): cls即类,说明传入的应当是一个类。 打印所有的类属性print([i for i in cls.__dict__.values() if not str(i).startswith(<") and i and __)]) 注释: 列表推导式复习 由于有方法,所以不能以 < 开头 ,不能是None, 不能以__开头的内容打印出来 ==== 正确的打开方式,类的绑定方法应该由类调用 ==== School.show_attr() ==== 不推荐使用实例对象去调用类的绑定方法,因为它根本拿不到实例对象的 __dict__ 但是Python依然不会抛出异常 ==== s1 = School(黄埔军校) s1.show_attr() ==== 执行结果 ==== Ps:可以看到并没有打印黄埔军校,说明拿的是School的 __dict__ ['学校类','任意地方','虚拟'] ['学校类','虚拟'] """ 专属工具包staticmethod作用
静态方法案例Foo(object): @staticmethod tool(string): 工具方法.,string) Foo.tool(类也可以调用) f1 = Foo() f1.tool(实例可以调用) print(Foo.tool) (f1.tool) ==== 执行结果 === Ps:可以看到,并没有变为实例绑定方法。因此也不会自动传入self 工具方法. 类也可以调用 工具方法. 实例可以调用 <function Foo.tool at 0x00000209FEEAFF70> <function Foo.tool at 0x00000209FEEAFF70> """ 小总结
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |