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 ...
随机推荐
- Entity Framework应用:使用Code First模式管理存储过程
在EF中使用存储过程和使用视图是很相似的,一般会使用Database对象上的两个方法:SqlQuery和ExecuteSqlCommand.为了从存储过程中读取很多数据行,我们只需要定义一个类,我们会 ...
- print spooler 服务无法启动 打印机全部消失
这往往是失败的打印任务导致的. 打开 C:\Windows\System32\spool\PRINTERS ,这个目录下的文件全是打印缓存,失败的任务也保存在这里.把这里的文件全部删除,然后再重新启动 ...
- WPF查找子控件和父控件方法
一.查找某种类型的子控件,并返回一个List集合 public List<T> GetChildObjects<T>(DependencyObject obj, Type ty ...
- csv导入mysql提示错误[Error Code] 1290 - The MySQL server is running with the --secure-file-priv option
解决方法: 1.进入mysql查看secure_file_prive的值 mysql>SHOW VARIABLES LIKE "secure_file_priv"; secu ...
- c# winform 自动关闭messagebox 模拟回车
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 【Java面试题】1 Java中使用switch-case的用法及注意事项超全总结
今天在用到switch的时候,这种设计到最基本的内容,可能忘记它的一些基本语法,出现了一些错误,所以即兴从各种资料查询总结了下面的内容,希望可以帮助那些正在困扰switch错误和各种细节问题的朋友! ...
- JavaSE(八)之Collection总结
前面几篇把集合中的知识大概都详细的说了一遍,但是我觉得还是要总结一下,这样的话,可以更好的理解集合. 一.Collection接口 首先我们要一张图来说明: Collection接口,它是集合的顶层接 ...
- WinSock1.1和WinSock2.0
网络编程很重要,说到网络编程就不得不提Socket编程. Windows提供了Windows Socket API(简称WSA),WinSock,目前有两个版本:WinSock1.1 and WinS ...
- js判断用户关闭页面或浏览器
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- linux Redhat 6环境上通过源码包安装DRBD 8
环境描述: 操作系统版本:Red Hat Enterprise Linux Server release 6.6 (Santiago) 系统内核版本:2.6.32-504.el6.x86_64 DRB ...