Python的程序结构[0] -> 属性/Property[0] -> 类属性、实例属性和私有属性
类属性、实例属性和私有属性
Python中类的属性主要包括类属性,实例属性和私有属性,下面是对三种属性的简单介绍
类属性 / Class Property
类属性在__init__()之外初始化,在外部可以通过类,类实例进行调用, 在内部可以通过类进行调用。
在定义属性的过程中,尽量将各个实例共有的属性定义为类属性,因为定义为实例属性则在每一次实例化时都会初始化一次,为此定义为类属性可以减少内存加快运行速度。
实例属性 / Instance Property
实例属性一般在__init__()内进行初始化,在外部可以通过实例进行调用, 在内部可以通过self进行调用。
私有属性 / Private Property
私有属性可分为两种,
- 单下划线_开头: 只声明这是私有属性,但依然可以从外部进行调用;
- 双下划线__开头: 外部无法直接调用,实际是转换成了_classname__propertyname
私有属性不仅无法在外部直接进行调用,在继承时也无法相互访问私有属性,即子类无法直接继承父类私有属性,父类也无法直接访问子类的私有属性。
代码示例
以一个例子来介绍这三种属性的区别,
class Foo():
classProperty = 'classProperty'
_privatePropertyCallable = 'privatePropertyCallable'
__privateProperty = 'privateProperty'
def __init__(self):
self.instanceProperty = 'instanceProperty'
self.__privateProperty = 'selfPrivateProperty'
首先定义了一个 Foo 类,并在类中定义了三个类属性,和两个实例属性,其中 classProperty 为普通的类属性,而 _privatePropertyCallable 和 __privateProperty 为私有的类属性;同理,在初始化方法中,self.instanceProperty 为普通的实例属性,而 self.__privateProperty 为实例的私有属性,
定义完成后对上面的 5 个属性分别进行调用,
# Call class property
print(Foo.classProperty)
print(Foo().classProperty)
# Call instance property
print(Foo().instanceProperty)
# Call private property
print(Foo._privatePropertyCallable)
print(Foo._Foo__privateProperty)
print(Foo()._Foo__privateProperty)
第 2 和第 3 行用类和类实例两种方式分别调用类属性,
第 5 行用实例调用实例属性,值得注意的是,此处无法使用 Foo.instanceProperty 的方式来调用实例属性,
第 7 行用类的方式调用了单下划线声明的私有属性,虽然可以实现调用,但在实际使用中却不被推荐,
第 8 / 9 行则分别以类和类实例的方式,通过类名强行调用了各自的私有属性。
最终的输出依次结果为
classProperty
classProperty
instanceProperty
privatePropertyCallable
privateProperty
selfPrivateProperty
Python的程序结构[0] -> 属性/Property[0] -> 类属性、实例属性和私有属性的更多相关文章
- 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?
第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样? 一. 案例说明 我们上节提到了,使用property函数定义的属性不要与类内已经定义的普通实例变量重 ...
- Python的程序结构[1] -> 方法/Method[0] -> 类实例方法、私有方法和抽象方法
类实例方法.私有方法和抽象方法 Python中最常用的就是类实例方法,类似于属性中的类实例属性,同时,也存在与私有属性类似方法,即私有方法,下面介绍这两种常见的方法,以及一种特殊意义的类实例方法 -- ...
- Python的程序结构[5] -> 模块/Module[0] -> 内建模块 builtins
builtins 内建模块 / builtins Module 在Python的模块中,有一种特殊模块,无需导入便可以使用,其中包含了许多内建函数与类. builtins 模块内容 / builtin ...
- Python的程序结构[3] -> 变量/Variable[0] -> 变量类型
变量类型 / Variable Type 在 Python 中,变量主要有以下几种,即全局变量,局部变量和内建变量, 全局变量 / Global Variable 通常定义于模块内部,大写变量名形式存 ...
- Python的程序结构[4] -> 函数/Function[0] -> 函数与方法的区别
函数与方法的区别 / Distinction of Function and Method 关于函数与方法的区别,可根据两者的定义看出, 函数function -- A series of state ...
- Python的程序结构[2] -> 类/Class[0] -> 类的特殊属性
类的特殊属性 / Special Property of Class Python 中通过 class 进行类的定义,类可以实例化成实例并利用实例对方法进行调用. 类中还包含的一些共有的特殊属性. 特 ...
- Python的程序结构[1] -> 方法/Method[1] -> 静态方法、类方法和属性方法
静态方法.类方法和属性方法 在 Python 中有三种常用的方法装饰器,可以使普通的类实例方法变成带有特殊功能的方法,分别是静态方法.类方法和属性方法. 静态方法 / Static Method 在 ...
- Python的程序结构[1] -> 方法/Method[2] -> 魔术方法 __init__ / __del__ / __new__
魔术方法 / Magic Method 魔法方法就是可以给你的类增加魔力的特殊方法(实质应称为特殊方法,魔术方法在JavaScript中有所体现,对象具有不透明特性,而且无法在自定义对象中模拟这些行为 ...
- Python的程序结构[2] -> 类/Class[1] -> 基类与继承
基类与继承 / Base Class and Inheritance Class 面向对象的特性使得 Python 中不可避免地需要使用到类和类的继承,类的继承可以使得代码很好的被重用.下面以一些代码 ...
随机推荐
- PHP字符串word末字符大小写互换
要求 给出一个字符串如 “A journey of, a thousand 'miles' must can't \"begin\" with a single step.” ,通 ...
- python使用工具简介介绍
我从研究生开学以来就开始在学python,现在来简单分享下一些基本的使用命令和快捷方式 Pycharm: 运行程序 ctrl+alt+F10 删除一行ctrl+D 注释ctrl+/ 安装python所 ...
- Python下安装protobuf
1. 下载安装包 2. 解压缩 tar –xzvf protobuf-2.6.1.tar.gz 3. 安装protoc 在python中使用protocbuf需要Protocal Buffer 编译器 ...
- 在LinkedIn的 Kafka 生态系统
在LinkedIn的 Kafka 生态系统 Apache Kafka是一个高度可扩展的消息传递系统,作为LinkedIn的中央数据管道起着至关重要的作用. Kafka 是在2010年在LinkedIn ...
- 虚拟机——vmtools安装出现Detected GCC binary at usr.bin.gcc.
在安装VMWare Tools遇到过这样一个问题 Searching for GCC... Detected GCC binary at "/usr/bin/gcc". The p ...
- 性能优化-使用 RAIL 模型评估性能
RAIL 是一种以用户为中心的性能模型.每个网络应用均具有与其生命周期有关的四个不同方面,且这些方面以不同的方式影响着性能: TL;DR 以用户为中心:最终目标不是让您的网站在任何特定设备上都能运行很 ...
- javascript传递参数如果是object的话,是按值传递还是按引用传递?
作者:苏墨橘链接:https://www.zhihu.com/question/27114726/answer/35481766来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- 纯css美化复选框,单选框,滑动条(range)
<div class="box"> <!-- 借鉴地址:http://www.cnblogs.com/xiaoxianweb/p/5465607.html --& ...
- 在Linux内核中添加系统调用,并编译内核
1 环境准备 运行系统:vmware下安装的ubuntu10.10 32bit桌面版. 编译内核版本: linux-2.6.32.63 内核目录: /home/wanchouchou/linuxKer ...
- HTTP协议中GET、POST和HEAD的介绍
HTTP协议中GET.POST和HEAD的介绍 GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页面的首部. POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体 ...