面向对象进阶
私有变量
__a:私有变量,在变量名称前加上“__”
约定:在变量前加上一个下划线“_”,表示很重要(私有),不要乱动
例:
class A(object): def __init__(self): #私有:在变量名称前加上‘— —’ #私有 不可继承,不可再外部调用 #但是可以在内部调用 self.__a = 1000 def B(self): print(self.__a) A_ = A() #print(A_.__a) 不可调用 print(A_.B()) #可调用 None是因为没有return
例:写一个注册页面
1.使用邮箱注册
2.使用密码,两次输入的密码要相等
class zhuce(object): def youxiang(self): email = input('请选择邮箱注册:') print(email) def mima(self): self.mima=input("请输入6位密码:") if len(self.mima)!= 6: self.mima() def zcmm(self): pass_1=input("再次输入密码") if self.mima==pass_1: print("密码确认成功") else: print("两次输入密码不一致,请重新输入") self.zcmm() y=zhuce() y.youxiang() y.mima() y.zcmm()
@proprety装饰器
使用装饰器的时候,需要注意:
1. 装饰器名,函数名需要一致.
2. property需要先声明,再写setter,顺序不能倒过来
3. 如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
4. 如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器.
例:输入三个数字(私有),求三个数字的和,尝试更改其中两个数字
class Name(object): def __init__(self,a,b,c): self.__a = a self.__b = b self.__c = c @property #访问器 def a(self): print(self.__a) @a.setter #修改器 def a(self,d): self.__a = d def add(self): add = self.__a + self.__b + self.__c print(add) name = Name(10,2,5) name.a=12 #可修改 name.add()
注:在Python中类是动态的
__slots__
需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。
class Person(object): # 限定Person对象只能绑定_name, _age和_gender属性 __slots__ = ('_name', '_age', '_gender')

浙公网安备 33010602011771号