1,特性propety,访问它时会执行一段功能,然后返回值
class Person: def __init__(self, name, age): self.name = name self.__age = age @property # 查找(主要是用于私有属性) def func(self): return self.__age @func.setter # 增加和删除 (对于私有属性)当私有属性中存在是就是更改,没有就是增加, def func(self): return self.__age @func.deleter # 删除(对于私有属性) def func(self): del self.__age p1= Person("会员",29) # 实例化对象p1 p1.age = 26 # 增加属性self.age= 26 p1.__age = 25 # 修改类中的静态属性self.__age = 25 print(p1.func) # 查找属性self.__age的值为29 del p1.func # 删除self.__age的属性 print(Person.__dict__) print(p1.__dict__)
对属性(私有属性)在对象空间的增,删,改,查的一系列的操作,对类的空间的内容没有任何影响,只是引用到对象空间进行一番操作.
- 为什么要用property?
将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉到自己的name实质性了一个函数然后计算出来,这种特性的使用方式统一访问的原则
由于新式类具有三种访类问方式,我们可以根据他们几个属性的访问特点,分别将三个定义方法对同一个属性:获取,修改,删除
2,类方法,静态方法
- 2.1>类方法:
class A: def func(self): # 普通方法 print(self) @classmethod # 类方法 def func1(cls): print(cls) a1= A() print(a1) a1.func() print(a1) a1.func1() print(a1)
类方法:通过类名调用的方法,类方法中第一个参数约定俗称cls,python自动将类名(类空间)传给cls,对象调用类方法,cls的到是本身
class A: name = "老郑" count = 1 @classmethod def func(cls): return cls.name + str(cls.count + 1) print(A.func()) a1 = A() print(a1.func())
- 2.2>静态方法:对静态变量进行改变,要用类方法,在继承中,父类得到子类的空间.
class A: age = 12 @classmethod # 这个方法不用对象参与 def func(cls): cls.age = 30 #对B类的静态字段可以修改 return cls.age class B(A): @staticmethod def login(username, password): if username == "alex" and password == 123: print("登陆成功") else: print("登陆失败") A.login("alex",1234) def login(username,password): if username == "alex" and password == 123: print("登陆成功") else: print("登陆失败")
把相似的功能的函数封装在类中,1>提高了代码的逻辑性,条理性,2>调高了代码的复用性和维护性,3>增强了代码之间的联系