Python class的属性访问控制和内建函数重写实现高级功能以及@property

一、类属性的访问控制

Python Class确实是博大精深,我们还是来温习一下属性的访问控制作为开(fu)场(xi)。

首先_varname是可以访问的,__varname是不能直接访问(原理是__varname变成了_classname__varname)

 1 >>> class A:
 2 ...     _aa = 1
 3 ...     __bb = 2
 4 ...
 5 >>>
 6 >>>
 7 >>> c = A()
 8 >>> c._aa
 9 1
10 >>> c.__bb
11 Traceback (most recent call last):
12   File "<stdin>", line 1, in <module>
13 AttributeError: A instance has no attribute ‘__bb‘
14 >>> c._A__bb
15 2
16 >>>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

二、内建函数:

不想啰嗦直接上代码,注释来讲解:

 1 class Person(object):
 2     def __init__(self,name):
 3             self.name = name
 4     def __str__(self):
 5             return  "<class:Person Name:%s>"%self.name
 6     def __repr__(self):
 7             return  "<Name:%s>"%self.name
 8
 9 tom = Person("Tom")
10 print repr(tom)
11 print tom

 1 class Person(object):
 2     def __init__(self,name,age):
 3         self.name = name
 4         self.age = age
 5     def __str__(self):
 6         return  "<class:Person Name:%s>"%self.name
 7     def __repr__(self):
 8         return "<Name:%s>"%self.name
 9     def __len__(self):
10         return self.age
11 tom = Person("Tom",20)
12 print repr(tom)
13 print tom
14 print len(tom)

当然还有很多:

 1 def __iter__(self):#重写内建迭代功能
 2     ret = do_something()
 3     return ret
 4
 5 def __getitem__(self):#增加下表取对象功能
 6     pass
 7
 8 def __getattr__(self):#增加取自身属性的处理
 9     pass
10
11 def __call__(self):#直接实例当做函数调用
12     pass
13 """
14 class A:
15     def __call__(self):
16          print "ok"
17 a = A()
18 a()
19 >>> ok
20 """

三、@property方法属性化:

 1 class student:
 2     def __init__(self,name):
 3         self.name = name
 4     @property
 5     def age(self):
 6         return self.age
 7     @age.setter
 8     def age(self,age):
 9         self.age = age
10
11 """
12 a = student("stu")
13 a.age = 20
14 a.age
15 >>> 20
16 """

原文地址:https://www.cnblogs.com/KevinGeorge/p/8137094.html

时间: 2024-10-13 20:44:11

Python class的属性访问控制和内建函数重写实现高级功能以及@property的相关文章

python魔法方法-属性访问控制

属性访问控制 所谓的属性访问控制就是控制点号访问属性的行为,而且不仅是类的外部,连类的内部也受控制,代码见真章,边看代码边解释: __getattr__(self, item) 定义当访问不存在的属性时的行为,注意是不存在的属性. class Foo(object): def __init__(self, value): self.value = value def __getattr__(self, item): print item # 查看得到的参数是什么 print type(item)

Python学习之属性访问与描述符详解

在Python开发中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象 foo ,它有一个 name 属性,那便可以使用 foo.name 对此属性进行访问.一般而言,点(.)属性运算符比较直观,也是我们经常碰到的一种属性访问方式.然而,在点(.)属性运算符的背后却是别有洞天,值得我们对对象的属性访问进行探讨. 在进行对象属性访问的分析之前,我们需要先了解一下对象怎么表示其属性.为了便于说明,本文以新式类为例.有关新式类和旧式类的区别,大家可以查看Pyt

Python 中的属性访问与描述符

在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言,点(.)属性运算符比较直观,也是我们经常碰到的一种属性访问方式.然而,在点(.)属性运算符的背后却是别有洞天,值得我们对对象的属性访问进行探讨. 在进行对象属性访问的分析之前,我们需要先了解一下对象怎么表示其属性.为了便于说明,本文以新式类为例.有关新式类和旧式类的区别,大家可以查看Python官方文档.

Python进阶之“属性(property)”详解

Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情.在这篇文章中,我们将看到如何能做以下几点: 将类方法转换为只读属性 重新实现一个属性的setter和getter方法 在本文中,您将学习如何以几种不同的方式来使用内置的属性函数.希望读到文章的末尾时,你能看到它是多么有用. 开始 使用属性函数的最简单的方法之一是将它作为一个方法的装饰器来使用.这可以让你将一个类方法转变成一个类属性. 当我需要做某些值的合并时,我发现这很有用.其他想要获取它作为方法使用的人,发

Python中常见的文件对象内建函数

文件对象内建方法列表 文件对象的方法 操作 file.close() 关闭文件 file.fileno() 返回文件的描述符(file descriptor,FD,整数值) file.flush() 刷新文件的内部缓冲区 file.isatty() 判断file是否是一个类设tty备 file.next() 返回文件的下一行,或在没有其它行时引发StopIteration异常 file.read(size=-1) 从文件读取size个字节,当未给定size或给定负值时读取剩余的所有字节,然后作为

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 #

python 类中内置方法的重写

为达成目的,经常会在类中将一些内置方法进行重写,最常见的例如__setattr__,下面就通过内置属性,来查看重写会带来什么变化 先定义一个测试用的类,代码如下 class base: def __init__(self): pass inspect.getmembers(base): # 查看内置属性 打印结果如下 ('__class__', <class 'type'>) ('__delattr__', <slot wrapper '__delattr__' of 'object'

python --对象的属性

转自:http://www.cnblogs.com/vamei/archive/2012/12/11/2772448.html Python一切皆对象(object),每个对象都可能有多个属性(attribute).Python的属性有一套统一的管理方案. 属性的__dict__系统 对象的属性可能来自于其类定义,叫做类属性(class attribute).类属性可能来自类定义自身,也可能根据类定义继承来的.一个对象的属性还可能是该对象实例定义的,叫做对象属性(object attribute

python中常用的列表类型内建函数

1.list.append(obj)         向列表中添加一个对象obj list = ['apple', 'pear', 'orange'] >>> list.append('apple') >>> list ['apple', 'pear', 'orange', 'apple'] 2.list.count(obj)             返回一个对象obj在列表中出现的次数 >>> list.count('apple') 2 3.list