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 ...
随机推荐
- hadoop 参数
看<Hadoop:权威指南>的时候收集了书上写的一些需要优化的参数,记录了一下子,给大家分享一下吧. 1.mapred.task.timeout 任务超时时间,默认是10分钟 2.mapr ...
- C# 字典 Dictionary 遍历
using System; using System.Collections.Generic; public class Example { public static void Main() { / ...
- spring boot之访问静态页面
楼主前两天自学spring boot,然后在学习的过程中,出现一个疑问,就是如何去访问静态的html网页,这个问题,楼主上网上搜了下,找到的是在resource目录下建立一个templates文件夹, ...
- ps -a,job,netstat,daemons
kill -9是强制 -15是正常后执行 进程中的数据都写到 /proc/*这个目录下 进程 ps -l aux -lA zxjf(进程树) job ...
- 用javascript将数据导入Excel
网上收集的代码 <input type="button" name="out_excel" onclick="AutomateExcel();& ...
- 关于Cocos2d-x中增加暂停按钮的步骤
1.在GameScene.cpp的init方法中先定义一个里面放着可变换并在变换的时候会响应事件的MenuItem的Menu,这个Menu里面的可变换MenuItem又由两个小MenuItem组成,每 ...
- ubuntu12.04开启虚拟机的unity模式
终端中输入: sudo add-apt-repository ppa:gnome3-team/gnome3 sudo apt-get update sudo apt-get install gnome ...
- ibus拼音安装_ubuntu10.04
ubuntu10.04自带的拼音输入发太难用,所以从新安装ibus拼音. sudo apt-get install ibus ibus-pinyin ibus-qt4 ibus-gtk 然后运行 ib ...
- 剑指offer_面试题5_从尾到头打印链表(栈和递归实现)
题目:输入一个链表的头结点,从尾到头反过来打印出每一个节点的值 考察 单链表操作.栈.递归等概念. 理解:要实现单链表的输出,那么就须要遍历.遍历的顺序是从头到尾.而节点输出的顺序是从尾到头.因此,先 ...
- bedtools 的安装与使用
1) 安装 bedtools 提供了3种安装方式 从google code 下载源代码进行安装 利用系统中的包管理工具进行安装, 比如cnetos 下的yum, ubuntu下的apt-get, ma ...