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) print(A_.B()) print(dir(A_)) # 查看该实例所有的方法和属性
使用装饰器的时候,需要注意
1.装饰器名、函数名需一致 2.property需要先声明,再写setter,顺序不能倒过来 3.如果某个变量只允许被访问不允许被修改,就可以使用访问器@property 4.如果需要修改访问器中的变量,可以搭建一个修改器,或者删除访问器例子:
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 __ini__(self): self.a = 1000 def A(self): print(self.b) num = Num() num.b =100000 #print(num.a) print(num.b) num.A()
slots魔法
在类中定义__slots___变量来限定自定义类型的对象只能绑定某些属性 需要注意的是\_\_slots\_\_的限定只对当前类的对象生效,对子类并不起任何作用
class Num(object): __slots__ = ('a','b') def __init__(self): self.a = 1000 num = Num() num.b = 10000 print(num.b) num.c = 123 print(num.c)