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特性、属性以及私有化的更多相关文章

  1. Python面向对象中的“私有化”

    Python面向对象中的“私有化” Python并不直接支持私有方式,而要靠程序员自己把握在外部进行特性修改的时机. 为了让方法或者特性变为私有(从外部无法访问),只要在它的名字前面加上双下划线即可. ...

  2. python 类属性与方法

    Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...

  3. python 类属性和实例属性

    class AAA(): aaa = 10 # 情形1 obj1 = AAA() obj2 = AAA() print obj1.aaa, obj2.aaa, AAA.aaa # 情形2 obj1.a ...

  4. python类属性和类方法(类的结构、实例属性、静态方法)

    类属性和类方法 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两 ...

  5. 关于Python类属性与实例属性的讨论

    标题名字有点长. 之所以想写这个文章是因为碰巧看到网上一篇关于Pyhon中类属性及实例属性区别的帖子.因为我之前也被这个问题困扰过,今天碰巧看到了这篇帖子,发现帖子的作者只是描述了现象,然后对原因的解 ...

  6. python 特性:height-->while

    """ 出题:height 女生找对象 男生在1米-1.5米之间 小强你在哪里? 男生在1.5-1.7米之间 没有安全感 男生在1.7 - 1.8米之间 帅哥 留个电话 ...

  7. python 对象属性与 getattr & setattr

    Python对象的属性可以通过obj.__dict__获得,向其中添加删除元素就可以实现python对象属性的动态添加删除的效果,不过我们应该使用更加正规的getattr和setattr来进行这类操作 ...

  8. Python类属性访问的魔法方法

    Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- ...

  9. Python类属性和类方法

    01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两步: 1) 在内存中为对象 分配空间 2) 调用初始化方法 __in ...

  10. 5个Python特性 越早知道越好的

    Kirill Sharkovski 发布在 Unsplash 杂志上的照片 AI开发者按,Python 是近十年来兴起的编程语言,并且被证明是一种非常强大的语言.我用 Python 构建了很多应用程序 ...

随机推荐

  1. 安卓开发之RecyclerView

    RecyclerView是一个非常好用的控件,它的效果和ListView很相似,甚至可以说RecyclerView的出现是来取代ListView的 RecyclerView比ListView更加灵活, ...

  2. 工厂类分离与java反射机制

    网易 博客 发现 小组 风格 手机博客 玩LOFTER,免费冲印20张照片!> 创建博客登录  加关注 黙言-在路上 奋斗 首页 日志 相册 音乐 收藏 博友 关于我             黙 ...

  3. https配置

    总结了一下: 所谓用HTTPS的时候 app 前端要配置SSL 证书的意思就是:相当于服务器端与app 前端, 一个拿公钥,一个拿私钥.简单得说就是客户端发送请求的时候,用配置好的SSL证书里的加密方 ...

  4. strcpy, mencpy, memmove三者区别

    首先来看strcpy,目的是实现字符串的复制,这里需要注意几个点: 1.判断指针的有效性 2.将复制后的指针地址返回,为了支持链式操作 3.不要忘记将字符串最后一个自负'\0'复制给dest 4.注意 ...

  5. Ubuntu package offline install

    apt-get Use apt-get with the "--print-uris" option to do it. I also add "-qq" so ...

  6. 获取当前url并指定url中的字符 效果

    效果介绍:1.获取当前url 2.通过获取的url,找到指定的字符并判断 3.如果是指定字符,页面跳转到博客园:如果不是页面跳转到百度 例如:http://www.cnblogs.com/fs521c ...

  7. IBM developerWorks 的Ajax系列教程

    掌握 Ajax,第 1 部分: Ajax 入门简介 http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html?csrf-799150205 ...

  8. 收MUD巫师学徒,MUD开发,LPC语言开发

    收MUD巫师学徒,MUD开发,LPC语言开发 对这个有兴趣的联系我,签订协议  Q 184377367

  9. Unknown system variable 'tx_read_only'

    SpringMVC+SpringDataJPA(1.4.2.RELEASE)+hibernate(4.2.7)+mysql6.0的开发环境,mysql-connector要older than5.1. ...

  10. C语言程序设计(翁恺)--第三周课件中的三个遗留点

    刚刚写完第二周遗留点,下面写第三周的 第三周:判断 1.if和else后面也可以没有{}而是一条语句.如果if后不带{},但是后面跟了两条语句,并且后面还有else语句,那么程序会怎么执行? 在Dev ...