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私有化,则 ...
随机推荐
- 菜单制作:ul li横向排列
CSS菜单制作 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Spring事务之传播机制
Spring事务传播机制:Spring在TransactionDefinition接口中规定了种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套时事务如何进行传播.即协调已经有事务标识的方法之 ...
- MYSQL之路之表
- 在Linux系统上安装Git
Git是目前流行的非常好用的版本控制工具,这里介绍两种安装方式,1.yum安装,2.从github上下载最新的源码编译后安装 一.yum安装 1.在Linux上是有yum安装Git,非常简单,只需要一 ...
- pikaqiu练习平台(CSRF(跨站请求伪造) )
CSRF(跨站请求伪造) CSRF(跨站请求伪造)概述 Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接 ...
- PPT 素材大全
1.模板大全 2.三方辅助软件APP 3.PPT学习软件 www.presentationload.com dribble.com www.zcool.com.cn 4.其他功能
- 【做题笔记】CF1311A、B、C
或许以后会有D. A 题目大意:给定两个整数 \(a,b\) ,每次可以进行一下任意一个操作: \(a\) 加上任意一个正奇数 \(b\) 减去任意一个正偶数 问是否可以通过若干次操作把 \(a\) ...
- APL: ANSYS Power Library
1. creating accurate switching current waveforms (profiles) 2.output-state dependent decoupling capa ...
- C/C++内存四区
内存模型图 32位CPU可寻址4G线性空间,每个进程都有各自独立的4G逻辑地址,其中0~3G是用户态空间,3~4G是内核空间,不同进程相同的逻辑地址会映射到不同的物理地址中.其逻辑地址其划分如下: 各 ...
- [转] Go 的并发模式:Context
[转] Go 的并发模式:Context tips:昨天看了飞雪无情的关于 Context 的文章,对 go 中 Context 有了一个初步的认识.今天看到一个 go 官方博客的关于 Context ...