Python class的属性访问控制和内建函数重写实现高级功能以及@property
一、类属性的访问控制
Python Class确实是博大精深,我们还是来温习一下属性的访问控制作为开(fu)场(xi)。
首先_varname是可以访问的,__varname是不能直接访问(原理是__varname变成了_classname__varname)
>>> class A:
... _aa = 1
... __bb = 2
...
>>>
>>>
>>> c = A()
>>> c._aa
1
>>> c.__bb
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: A instance has no attribute '__bb'
>>> c._A__bb
2
>>>
二、内建函数:
不想啰嗦直接上代码,注释来讲解:
class Person(object):
def __init__(self,name):
self.name = name
def __str__(self):
return "<class:Person Name:%s>"%self.name
def __repr__(self):
return "<Name:%s>"%self.name tom = Person("Tom")
print repr(tom)
print tom

class Person(object):
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return "<class:Person Name:%s>"%self.name
def __repr__(self):
return "<Name:%s>"%self.name
def __len__(self):
return self.age
tom = Person("Tom",20)
print repr(tom)
print tom
print len(tom)

当然还有很多:
def __iter__(self):#重写内建迭代功能
ret = do_something()
return ret def __getitem__(self):#增加下表取对象功能
pass def __getattr__(self):#增加取自身属性的处理
pass def __call__(self):#直接实例当做函数调用
pass
"""
class A:
def __call__(self):
print "ok"
a = A()
a()
>>> ok
"""
三、@property方法属性化:
class student:
def __init__(self,name):
self.name = name
@property
def age(self):
return self.age
@age.setter
def age(self,age):
self.age = age """
a = student("stu")
a.age = 20
a.age
>>> 20
"""
Python class的属性访问控制和内建函数重写实现高级功能以及@property的更多相关文章
- python魔法方法-属性访问控制
属性访问控制 所谓的属性访问控制就是控制点号访问属性的行为,而且不仅是类的外部,连类的内部也受控制,代码见真章,边看代码边解释: __getattr__(self, item) 定义当访问不存在的属性 ...
- Python 中的属性访问与描述符
在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言,点(. ...
- Python中的属性访问与描述符
Python中的属性访问与描述符 请给作者点赞--> 原文链接 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个nam ...
- Python中的属性管理
Python管 理属性的方法一般有三种:操作符重载(即,__getattr__.__setattr__.__delattr__和 __getattribute__,有点类似于C++中的重载操作符).p ...
- Python进阶之“属性(property)”详解
Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情.在这篇文章中,我们将看到如何能做以下几点: 将类方法转换为只读属性 重新实现一个属性的setter和getter ...
- Python——私有化 和 属性property
Python——私有化 和 属性property 一.私有化 xx: 公有变量 _x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问 ...
- python基础——实例属性和类属性
python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...
- python特性、属性以及私有化
python中特性attribute 特性是对象内部的变量 对象的状态由它的特性来描述,对象的方法可以改变它的特性 可以直接从对象外部访问特性 特性示例: class Person: name = ' ...
- python --对象的属性
转自:http://www.cnblogs.com/vamei/archive/2012/12/11/2772448.html Python一切皆对象(object),每个对象都可能有多个属性(att ...
随机推荐
- CentOS安装redmine 2后的简单配置
CentOS5.4安装redmine详细步骤 http://blog.csdn.net/leekwen/article/details/8516832 <<<<输出日志的配置& ...
- iOS开发小技巧--tableView中实现无数据无分割线,有数据才有分割线
通过通讯录练习GET的技能
- DevExpress gridcontrol学习知识点
.//允许自动合并单元格gv1.OptionsView.AllowCellMerge = true; 设置某列不合并 选中该列,在OptionsColumns-->AllowMerge中设置为f ...
- sparkr基本操作1
由于装的sparkr是1.4版本的,老版本的很多函数已经不再适用了. 在2台服务器的组成的集群中测试了一版数据,熟悉下这个api的基本操作. libpath <- .libPaths() li ...
- ASP.NET四种页面导航方式之比较与选择
一.超级链接 从一个表单进入另一个表单最简单的方式是使用HTML超级链接控件.在Web表单中,使用超级链接的HTML代码类如: <a href="WebForm2.aspx" ...
- 关于Cocos2d-x中打包图集和使用方法
准备的过程 1.打开TextruePacker软件 2.把游戏中要使用的图片拖到TextruePacker里面,TextruePacker会自动帮我们排序,让所有小图变成一个大图 3.点击Publis ...
- Deep Reinforcement Learning from Self-Play in Imperfect-Information Games
Heinrich, Johannes, and David Silver. "Deep reinforcement learning from self-play in imperfect- ...
- JVM内存模型 小小结
可以看一下我的另一篇总结 JVM运行时数据区与JVM堆内存模型小结 推荐一篇文章,尚学堂的 Java内存模型深度解读 . 不方便全文转载,就摘录下吧. 以往的认知都是以基本类型.引用类型.常量.方法等 ...
- Ubuntu下启动/重启/停止apache服务器
Task: Start Apache 2 Server /启动apache服务# /etc/init.d/apache2 startor$ sudo /etc/init.d/apache2 start ...
- 【转载】C#进阶系列——动态Lamada
前言:在DDD系列文章里面,我们在后台仓储里面封装了传递Lamada表达式的通用方法,类似这样: public virtual IQueryable<TEntity> Find(Expre ...