标签:turn 存储 子类 不能 height 私有 adc 划线 div
面向对象的三大特性:继承 多态 封装
封装
广义上的
狭义上的:会对一种现象起一个专门属于它的名字
把一对东西装在一个容器里
函数和属性撞到了一个非全局的命名空间 -- 封装
python
pulic 公有的
private 私有的
java完全面向对象的语言
public 共有的
protect 保护的
private 私有的
定义一个私有的名字:就是在私有的名字前面加两天下划线 __N = ‘aaa’
所谓私有,就是不能再累的外面去引用它
class A: __N = ‘aaa‘ # 静态变量 def func(self): print(A.__N) # 在类的内部使用正常 a = A() a.func() print(A.__N) # 在类的外部直接使用 报错 class A: __N = ‘aaa‘ # 静态变量 def func(self): print(A.__N) # 在类的内部使用正常 print(A.__dict__) print(A._A__N) # python就是把__名字当成私有的语法
一个私有的名字,在存储的过程中仍然会出现A.__dict中,所以我们仍然可以调用
python对其的名字进行了修改:__类名_名字
只不过在类的外部调用:需要‘_类名__名字’去使用
在类的内部可以正常的使用名字
_A__N
在类内 只要你的代码遇到了__名字, 就会被python解释器自动的转换成_类__名字
私有的属性 class B: def __init__(self,name): self.__name = name def func(self): print(‘in func : %s‘%self.__name) b = B(‘alex‘) # print(b._B__name) b.func() 私有的方法 class C: def __wahaha(self): print(‘wahaha‘) def ADCa(self): self.__wahaha() c = C() # c._C__wahaha() c.ADCa()
在类中,静态属性,方法,对象属性都可以变成是由的,只需要在这些名字之前加上__
# class D: # def __func(self): # ‘_D__func‘ # print(‘in func‘) # # class E(D): # def __init__(self): # self.__func() # ‘_E__func‘ # e = E() # 私有的名字不能被子类继承 # class D: # def __init__(self): # self.__func() # def __func(self): # print(‘in D‘) # # class E(D): # def __func(self): # print(‘in E‘) # e = E() # 私有的名字,在类内使用的时候,就是会变形成_该类名__方法名 # 以此为例 :没有双下换线会先找E中的func # 但是有了双下划线,会在调用这个名字的类D中直接找_D__func
# class F: # pass # F.__name = ‘alex‘ # 不是在创建私有属性 # print(F.__name) # print(F.__dict__) # 变形只在类的内部发生
java中的对比
public 共有的 在类的内部可以使用,子类可以是使用,外部可以使用 python所有正常的名字
protect 保护的 在类的内部可以使用,子类可以使用,外部不可以使用 python中没有
private 私有的 只能在类的内部使用,子类和外部都不可以使用 python中的__名字
私有的用法
当一个方法不想被子类继承的时候
有些属性或者方法不希望从外部被调用,只想提供给内部的方法使用
例子:
描述一个房子
单价
面积
长宽高
class Room: def __init__(self,name,price,length,width,height): self.name = name self.price = price self.__length = length self.__width = width self.__height = height def area(self): return self.__length*self.__width r = Room(‘鹏鹏‘,100,2,1,0.5) print(r.name) print(r.price) print(r.area()) class Person: def __init__(self,name,pwd): self.name = name self.__pwd(pwd) def __pwd(self,pwd): # ‘12345‘ ---> ascii ---> 2175981070935 self.my_secret_pwd = 2175981070935
标签:turn 存储 子类 不能 height 私有 adc 划线 div
原文地址:https://www.cnblogs.com/hanjiahao/p/8903250.html