python特性、属性以及私有化
python中特性attribute
特性是对象内部的变量
对象的状态由它的特性来描述,对象的方法可以改变它的特性
可以直接从对象外部访问特性
特性示例:
class Person:
name = 'yoda' # 类中特性 def get_name(self): # 通过访问器方法访问特性
return self.name def set_name(self, value): # 通过访问器方法改变特性
self.name = value 运行:
A1 = Person()
A1.name # 直接从外部访问特性
yoda
A1.name = 'master' # 直接从外部改变特性 默认情况下,python支持从外部对特性进行操作,但它破坏了类的封装原则,要从外部对象无法访问,应该使用私有特性。
python中私有化特性
为了让外部无法访问特性或方法,只要在名字前面加上双下划线即可。
特性私有化示例:
class Secret:
__name = 'yoda' # 加上双下划线私有化特性
def get_name(self):
return self.__name def __secret(self): # 私有化方法
print "can't find" def access(self):
return self.__secret() # 访问器访问私有方法 A2 = Secret()
A2.__name # 访问不到特性!
A2._Secret__name # 还是可以从外部访问特性
yoda - python本质上并不完全支持私有化,只不过是将名字进行改变了
python中使用属性(property)对特性进行访问和设置
有一些面向对象语言支持私有特性,这些特性无法从外部直接访问,需要编写getter和setter方法对这些特性进行操作
python不需要getter和seter方法,因为python中所有特性都是公开的,如果不放心使用直接访问对象的特性,可以为对象编写setter和getter方法,但是更好的解决办法是使用属性(property)
- python隐藏访问器的方法,让所有特性看起来一样,这种通过访问器定义的特性被称为属性
属性使用示例:
# 第一种方法使用属性
class foo:
def __init__(self):
self.name = 'yoda'
self.work = 'master' def get_person(self):
return self.name,self.work def set_person(self,value):
self.name,self.work = value person = property(get_person,set_person) 运行如下:
A3 = foo()
A3.person
('yoda', 'master')
A3.person = 'skylaer','programer'
A3.person
('skylaer','programer') # 第二种方法使用属性
class foo:
def __init__(self):
self.name = 'yoda'
self.work = 'master'
@property
def person(self):
return self.name,self.work
@person.setter # 如果不指定stter属性,那么无法从类的外部对它的值进行设置,这对于只读特性非常有用
def person(self,value):
self.name,self.work = value
property()第一个参数是getter方法,第二个参数是setter方法
property函数可以用0,1,2,3或者4个参数来调用,如果没有参数,产生的属性既不可读,也不可写,这四个参数分别叫做fget,fset,fel,fdoc,如果想要一个属性是只写的,并且有一个文档字符串,能使用他们作为关键字参数
python特性、属性以及私有化的更多相关文章
- Python面向对象中的“私有化”
Python面向对象中的“私有化” Python并不直接支持私有方式,而要靠程序员自己把握在外部进行特性修改的时机. 为了让方法或者特性变为私有(从外部无法访问),只要在它的名字前面加上双下划线即可. ...
- python 类属性与方法
Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...
- python 类属性和实例属性
class AAA(): aaa = 10 # 情形1 obj1 = AAA() obj2 = AAA() print obj1.aaa, obj2.aaa, AAA.aaa # 情形2 obj1.a ...
- python类属性和类方法(类的结构、实例属性、静态方法)
类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...
- 关于Python类属性与实例属性的讨论
标题名字有点长. 之所以想写这个文章是因为碰巧看到网上一篇关于Pyhon中类属性及实例属性区别的帖子.因为我之前也被这个问题困扰过,今天碰巧看到了这篇帖子,发现帖子的作者只是描述了现象,然后对原因的解 ...
- python 特性:height-->while
""" 出题:height 女生找对象 男生在1米-1.5米之间 小强你在哪里? 男生在1.5-1.7米之间 没有安全感 男生在1.7 - 1.8米之间 帅哥 留个电话 ...
- python 对象属性与 getattr & setattr
Python对象的属性可以通过obj.__dict__获得,向其中添加删除元素就可以实现python对象属性的动态添加删除的效果,不过我们应该使用更加正规的getattr和setattr来进行这类操作 ...
- Python类属性访问的魔法方法
Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- ...
- Python类属性和类方法
01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两步: 1) 在内存中为对象 分配空间 2) 调用初始化方法 __in ...
- 5个Python特性 越早知道越好的
Kirill Sharkovski 发布在 Unsplash 杂志上的照片 AI开发者按,Python 是近十年来兴起的编程语言,并且被证明是一种非常强大的语言.我用 Python 构建了很多应用程序 ...
随机推荐
- Oracle 12c多租户架构浅析
Oracle数据库12c的一大创新即是其采用的多租户架构.对于多租户这项新功能,业内的评价褒贬不一.有的声音认为,这项功能的用处不是特别大,但在某些场景或特定的环境下,多租户依然有它的用处.其最大的用 ...
- SQL字符型字段按数字型字段排序实现方法(转)
由于是按字母顺序排列,所以123排在了2的前面,显然不符合我们的要求,那么怎样才能按照我们预想的数字顺序排序呢 ORDER BY `meta_value` 那么按得分排序得到的结果可能是:1101 ...
- div模拟textarea以实现高度自适应实例页面
作为多行文本域功能来讲,textarea满足了我们大部分的需求.然而,textarea有一个不足就是不能像普通div标签一样高度可以跟随内容自适应.textarea总是很自信地显摆它的滚动条,高度固执 ...
- ffmpeg在Win7 VS2010中debug通过,release出错的问题解决方法
我所用的系统环境是Win7 32位操作系统+VS2010编译环境.所以在debug模式下调通之后,在Release模式下调试不通过,最后通过上网查资料和自己对比两个编译选项得出以下结论: 修改“项目- ...
- LINQ 联合查询
List<Attachment> imgList = (from a in ZQSDWEBEntities.Attachment ...
- 4位或者5位led数码显示,485通信modbus,支持任意小数点写入,工业标准设置,可和plc,dcs,组态完美对接,支持定制修改
MRD-5030具有4位8段数码管,支持通过工业标注协议Modbus(Modbus-RTU)控制显示,支持任意小数点的显示.数据以半双工方式通信.电源端口和通信端口都具有防浪涌,防雷600W保护,能够 ...
- zookeeper watch 节点
zjtest7-redis:/root/zk# cat a1.pl use ZooKeeper; use AnyEvent; use AE; use Data::Dumper; use IO::Soc ...
- egret-android-support-gradle版
从3.1.3开始,Egret已经实现了Gradle构建!所以下文你爱看不看! 迟钝的Egret从3.1.3版本才开始支持Gradle,而笔者早在1.6.x版本就已经支持了,说明什么?说明Egret在某 ...
- 初识Java--线程同步(2)
本文讲述Java中的线程同步和生产者消费者问题,其中主要涉及线程同步和wait().notify()方法的用法. wait和notify方法只能用在线程同步中,wait和notify是object的方 ...
- IE 创建条件样式
1.HTML 注释 <div id="header">Header Section</div> <!-- End Header Section Con ...