Python - 私有属性(双下线的变形)
__x会自动变形为_类名__x
正常情况
class A:
def foo(self):
print('from A')
def test(self):
self.foo()
class B(A):
def foo(self):
print('from B')
b = B()
b.test()
# from B
把foo定义成私有
class A:
def __foo(self): #双下线私有属性在定义时就变形为_A__fa
print('from A')
def test(self):
self.__foo() #调用变形后的私有属性对象,即_A__fa
class B(A):
def __foo(self):
print('from B')
b = B()
b.test()
# from A
原理:父类的__x私有属性在定义时已经变形为_父类__x,子类可以继承这个属性,但无法覆盖。所以test()里面的self.__foo的self已经绑定了父类,子类的__foo()无法覆盖。
class A:
def __foo(self): #双下线私有属性在定义时就变形为_A__fa
print('from A')
def test(self):
self.__foo() #调用变形后的私有属性对象,即_A__fa
class B(A):
def __foo(self):
print('from B')
b = B()
b._A__foo()
# from A
Python的私有属性的缺点
这种变形并没有真正限制从外部直接访问属性
class A:
def __foo(self):
print('from A')
def test(self):
self.__foo()
a = A()
a._A__foo()
Python - 私有属性(双下线的变形)的更多相关文章
- python私有属性和私有方法
私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私 ...
- Python 私有属性
#!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-08-05 # 类 ...
- python 基础——私有属性
私有属性 python 私有属性以两个下划线开头. python 私有属性只能在类内部访问,类外面访问会出错. python 私有属性之所以不能在外面直接通过名称来访问,其实质是因为 python 做 ...
- 【编程开发】Python隐藏属性——使用双下划线标识私有属性,外部不可直接访问
from:https://zhuanlan.zhihu.com/p/30553607 小编在最初使用上Python之后,就一发不可收拾,人生苦短.我用Python,不光是因为其优雅简洁, ...
- Python 之私有属性
概要 在基类的定义中,如果有些属性或者方法,我们希望隐藏它,从而不被子类继承,或者使其不被实例直接访问到,这时候可以用到私有属性的命名方法.尽管类的所有属性和方法在某种意义上说都是"暴露的& ...
- Python 类的私有属性与私有方法
1.隐藏的使用场景 在Python类中,有些属性和方法只希望在对象的内部被使用,而不希望在外部被访问到, 2.定义方式, 在属性名或方法名前增加两个下划线,定义的就是私有属性或方法 #其实这仅仅这是一 ...
- Python的伪私有属性
什么是伪私有属性? 在Python中,没有类似 private 之类的关键字来声明私有方法或属性. Python中要声明私有属性,需要在属性前加上双下划线(但是结尾处不能有双下划线),如:self._ ...
- 洗礼灵魂,修炼python(33)--面向对象编程(3)—特殊类方法__init__,公有属性,私有属性
在上一篇博文里,传入参数时,是在实例化对象后且在调用方法时才传入参数,感觉是不是有点繁琐对吧?可以在实例化的时候就传入参数吗?可以的,这就是本篇博文的要讲到的构造器——__init__(两边双下划线) ...
- python学习笔记013——模块中的私有属性
1 私有属性的使用方式 在python中,没有类似private之类的关键字来声明私有方法或属性.若要声明其私有属性,语法规则为: 属性前加双下划线,属性后不加(双)下划线,如将属性name私有化,则 ...
随机推荐
- Python列表和字典的简单实操例子
# coding=utf-8 name_l = [] passwd_l = [] money_l = [] goods = {} index = 0 def input_user(): print(& ...
- c# 泛型<T>类型参数T的约束where
在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制.如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误.这些限制称为约束.约束是使用 where 上 ...
- python之路之面向对象
一.编程 1.面向对象编程和函数式编程 a.面向对象编程之self(重点) b.面向对象的封装 c.继承 (1)继承的优先级 d.重载 e.多态 2.查看socketserver源码执行过程
- pikaqiu练习平台(CSRF(跨站请求伪造) )
CSRF(跨站请求伪造) CSRF(跨站请求伪造)概述 Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接 ...
- 在页面跳转的时候,在跳转后的页面中使用js 获取到 页面跳转的url中携带的参数。
common.js代码 //获取URL中的参数..等等function getQueryString(name){var reg = new RegExp("(^|&)"+ ...
- 【转载】Java的JDBC事务详解
转自:http://www.cnblogs.com/azhqiang/p/4044127.html 事务的特性: 1) 原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单 ...
- tomcat查看当前内存
查看运行中的tomcat内存非常简单,只需运行一下此界面就可以看到. <html> <head><meta http-equiv="Content-Type&q ...
- C# 对象对比是否相等 工作笔记
需要在Linq 中对比两个对象是否相等 /// <summary> /// 定义一个点 /// </summary> class Point { public int x { ...
- 【10】DP青蛙跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1 ...
- zabbix-agent不能启动:配置文件出现特殊字符导致
问题如下: 定位查找问题: 命令:journalctl -xe [重点] 图中可见错误信息在zabbix_agent配置文件中的“hostname=”中不能出现特殊字符,我出错的原因是写成了:hos ...