property 内置装饰器函数 只在面向对象中使用
from math import pi class Circle: def __init__(self, r): self.r = r @property # 将类似属性却需要操作得到的一些方法伪装成对象属性 def perimeter(self): return 2 * pi * self.r @property def area(self): return pi * self.r ** 2 circle = Circle(5) print(circle.perimeter) # 调用方法和操作属性相同 本质上还是方法 print(circle.area)
property 提供私有属性的查看,修改和删除
class Person: def __init__(self, name): self.__name = name @property def name(self): return self.__name @name.setter # 修改 通过赋值来修改 def name(self, new_name): self.__name = new_name @name.deleter def name(self): del self.__name p = Person(‘zxc‘) print(p.name) # zxc p.name = ‘zxf‘ print(p.name) # zxf del p.name # 这里的del只是对应@name.deleter,主要看@name.deleter下面的方法执行了什么 # print(p.name) # 报错 显示没有name属性
classmethod和staticmethod
class Person: __key = ‘人类‘ def __init__(self, name): self.__name = name @property def name(self): return self.__name @classmethod # 将一个方法变成类中的方法,使这个方法可以直接被类调用而不用依托对象 def change_key(cls, new_key): cls.__key = new_key print(Person._Person__key) # 人类 Person.change_key(‘human‘) print(Person._Person__key) # human # 当这个方法的操作只涉及静态属性的时候 就应该使用classmethod来装饰这个方法
class Login: def __init__(self,name,password): self.name = name self.pwd = password def login(self): pass @staticmethod # 装饰一个完全跟类和对象没有关系的静态方法,通过类调用 def get_usr_pwd(): # 静态方法 usr = input(‘用户名 :‘) pwd = input(‘密码 :‘) Login(usr, pwd) # 一般用在完全面向对象编程的时候