封装之如何实现属性的隐藏

class A:    _s =1   #变形为   _A__s    def __init__(self, name):        self.__name = name  #变形self.  _A__name    def __Foo(self):  #_A__Foo(self)        print(‘run  to‘)    def bar(self):        self.__Foo()   #self._A__Foo        print(‘from __Foo‘)a = A(‘老王‘)a.bar()a._A__Foo()print(A.s)print(a.__name)  #a.__dict__.[_A__name]print(a.__dict__)print(A._dict__)

‘‘‘这种左边‘__’双下划线的操作的隐藏方式有啥特点?    1,通过object.Attrname(隐藏的属性名字)是无法访问的到的    2,但是在内部可以访问的到 如上在定义一个函数bar在函数bar内部调用隐藏函数__Foo    在对象哪里调用bar结果可以成功打印‘from __Foo’    3,子类无法覆盖父类的带‘__‘的属性的任何变量

‘‘‘#对以上第三条证明:class Foo:    def __func(self):  #_Foo__func        print(‘老王吃屎‘)class Bar(Foo):    pass    # def __func(self):  #_Bar__func    #     print(‘老王的媳妇出轨啦‘)a = Bar()a._Foo__func()

#这种变形需要注意的是:    #1,:print(_类名__被影藏的函数属性)    #2:如果需要隐藏属性名字,必须在类的定义的时候就隐藏如果类已经定义完成    #再给类添加隐藏属性则无法创建class A:    __ss = 4    def __func(self):        print(‘老王的媳妇真好看‘)s = A()s.__dd = 5  #这里定义了隐藏属性但是它并非隐藏,print(s.__dd)#用原始的打印方式依然可以访问的到

# 如果加用‘__‘,dd.bar()执行时在自己的对象和类里面都没有找到会去父类里找,父类找到时又# 执行foo 此时如果foo换成__foo,程序就不会去自己的类或者对象里面找,而是在自己所在的类# 里面 找并且执行class B:    def __foo(self):  #_B__foo        print(‘from B foo‘)    def bar(self):        self.__foo()  #self._B__foo        print(‘from bar‘)class C(B):    def foo(self):  #_C__foo        print(‘from C foo‘)dd = C()dd.bar()

原文地址:https://www.cnblogs.com/yuexijun/p/10247333.html

时间: 2024-11-01 15:49:35

封装之如何实现属性的隐藏的相关文章

c#封装和类的属性课堂上机练习

封装和类的属性课堂上机练习 课堂上机任务一:字段的定义与使用 时间:12分钟 要求: 在汽车类Car中创建字段,并在按钮的单击事件中显示各个字段的信息. 步骤: ?1.创建一个窗体类型的项目CarSystem ?2.创建汽车类Car,该类包含的字段:车名.价格.厂家 ?3.写一个按钮的单击事件,用MessageBox.Show方法显示这些字段信息 ?4.创建一个窗体,输入车名.价格.厂家,并存储到Car对象的对应字段中 ?5.测试该类,尝试价格为10亿元时会出错吗?这样的价格符合生活常识吗? 课

变速动画函数封装增加任意一个属性

//计算后的样式属性---- 一个元素的任意的一个样式属性值function getStyle(element,attr) { //判断这个浏览器是否支持这个方法 return window.getComputedStyle?window.getComputedStyle(element,null)[attr]:element.currentStyle[attr];}//匀速动画function animate(element,attr,target) { //element--元素 attr-

封装运动框架单个属性

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>封装运动框架的单个属性</title> <style> div{ width: 100px; height: 100px; font-weight:bold;">pink; position: absolute; left: 10px

关于js封装框架类库之属性操作

在对DOM对象操作时,往往都要涉及到其属性的操作,为了提高开发效率,同时兼顾浏览器的性能,在这简单的封装了几个常见的属性.因为是模块化,在这只是引入了部分代码,其他代码在前几篇模块封装中有写.如有不足,万望提出,谢谢! 1.判断是否有属性,以及设置属性的操作 YY.fn.extend({ attr: function (attName,attValue){ //判断传入参数是否有属性值,没有直接返回属性名 if(arguments.length == 1){ return this[0].att

c# 中面相对性的三个特点:封装,继承,多态, 以及c#中隐藏(new)和方法重写(override)和重载(overload)的区别

封装 1)封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问,通常有两种访问方式:set 设置,get 获取. 2)封装结果:存在但是不可见. 3) 访问修饰符 声明的可访问性                                 含义 public                                    访问不受限制. protected                              访问仅限于本类或者其子类(可以跨程序集). p

struts2 中属性驱动(其实就是struts2 action 中处理 request 的参数【old 方式servlet api 封装数据到javabean中(or beanutils)】),这里属性驱动是新方式

1.属性驱动 a\  一般的set 1 public class UserAction extends ActionSupport { 2 3 private String username; 4 private String password; 5 6 public void setUsername(String username) { 7 this.username = username; 8 } 9 10 public void setPassword(String password) {

C# extended toolkit propertygrid 隐藏部分属性

该方法是通过更改ShowDetail的状态来实现的隐藏属性 首先在引用里右键 管理NuGet程序包 查找extended wpf toolkit 并安装 然后在MainWindow.xaml添加引用 xmlns:extoolkit="http://schemas.xceed.com/wpf/xaml/toolkit" extoolkit为自命名 页面代码如下 <Window x:Class="Toolkitpropertygrid.MainWindow"   

js封装函数控制div的显示与隐藏

<div id="test"></div> JS: <script> function ShowDivBoxOrNot(objName, bShow) { if (bShow == true) { document.getElementById(test).style.display = "block"; } else { document.getElementById(test).style.display = "no

.net工作流引擎ccflow开发平台属性功能的隐藏显示介绍

关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明  工作流设计 工作流快速开发平台   业务流程管理   bpm工作流系统  java工作流主流框架  自定义工作流引擎 应用背景: 驰骋工作流系统大大小小的功能高达2000多项,所以不是多有的功能都能被企业所使用的,为了系统的简介他们需要隐藏一些暂时用不到的功能,但是一段时间后可能就需要某些原来隐藏掉的功能,所以单纯的从代码里隐藏是不够理想的,这时候就需要做一个同意管理的功能来自由处