taoyx.log co"> 封装2 - 11GX
首页 > 封装2

封装2

面向对象的三大特性:继承 多态  封装

封装

  广义上的

  狭义上的:会对一种现象起一个专门属于它的名字

把一对东西装在一个容器里

函数和属性撞到了一个非全局的命名空间 -- 封装

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 = namedef 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 = nameself.price = priceself.__length = lengthself.__width = widthself.__height = heightdef area(self):return self.__length*self.__widthr = Room('鹏鹏',100,2,1,0.5)
print(r.name)
print(r.price)
print(r.area())class Person:def __init__(self,name,pwd):self.name = nameself.__pwd(pwd)def __pwd(self,pwd):# '12345' ---> ascii ---> 2175981070935self.my_secret_pwd = 2175981070935

  

 

转载于:https://www.cnblogs.com/hanjiahao/p/8903250.html

更多相关:

  • #coding:utf-8'''Created on 2017年10月25日@author: li.liu'''import pymysqldb=pymysql.connect('localhost','root','root','test',charset='utf8')m=db.cursor()'''try:#a=raw_inpu...

  • python数据类型:int、string、float、boolean 可变变量:list 不可变变量:string、元组tuple 1.list list就是列表、array、数组 列表根据下标(0123)取值,下标也叫索引、角标、编号 new_stus =['刘德华','刘嘉玲','孙俪','范冰冰'] 最前面一个元素下标是0,最...

  • from pathlib import Path srcPath = Path(‘../src/‘) [x for x in srcPath.iterdir() if srcPath.is_dir()] 列出指定目录及子目录下的所有文件 from pathlib import Path srcPath = Path(‘../tenso...

  • 我在使用OpenResty编写lua代码时,需要使用到lua的正则表达式,其中pattern是这样的, --热水器设置时间 local s = '12:33' local pattern = "(20|21|22|23|[01][0-9]):([0-5][0-9])" local matched = string.match(s, "...

  • 在分析ats的访问日志时,我经常会遇到将一些特殊字段对齐显示的需求,网上调研了一下,发现使用column -t就可以轻松搞定,比如 找到ATS的access.log中的200响应时间过长的日志 cat access.log | grep ' 200 ' | awk -F '"' '{print $3}' > taoyx.log co...