08.07面向对象
访问可见性
- 私有变量,变量名前面加"__"
- 私有不可继承,不可在外部调用,但可以在内部调用。
- 如果非要使用私有变量,那么可以使用dir(class())去查看它真正的名字。
- 私有变量/函数,在类内部可以直接调用。
- 如果你想体现一个变量/函数特别重要你可以使用"_"
#私有
class A(object): def __init__(self): self.__a=1000 self.__b=100 def __B(self): print(self.__a) self.c() def __c(self): print(self.__a) A_=A() print(A_._A__a)
class squre(object): def __init__(self): self._mi="藏起来,不给看,想看输密码" @property def mi(self): return self._mi @mi.setter def mi(self,str_): self._mi=str_ def look(): s=squre() print(s.mi) def change(password,str_): if password =='2323213': s=squre() s.mi=str_ print(s.mi) else: print('密码错误') change('2323213','hhhhh')
#装饰器的使用
class Name(object): def __init__(self,a,b): self.__a=a self.__b=b @property def A (self): print(self.__a) name=Name(00,200) name.A
#修改器的使用 class Name(object): def __init__(self,a,b): self.__a=a self._b=b @property def A(self): print(self.__a) @A.setter def A(self,a1): self.__a=a1 def play(self): print(self.__a) print(self.__b) name=Name(100,200) name.A=1000 name.play()
- 例子:输入三个数字(私有),求三个数字的和,尝试更改其中两个数字
class A(object): def __init__(self,a,b,c): self.__a=a self.__b=b self.__c=c @property def B(self): print(self.__a) @B.setter def B(self,num): self.__a=num def sum(self): print(self.__a+self.__b+self.__c) a=A(12,1,4) a.B=99 a.sum()
在python中类是动态的。
class Num(object): def __init__(self): self.a = 1000 def A(self): print(self.b) num = Num() num.b =1000000 # print(num.a) print(num.b) num.A()
class Person(object): #限定Person对象只能绑定_name,_age和——gender属性 __slots__ = ('_name','_age','_gender') def __init__(self,name,age): self.__name=name self.__age=age