Python -- OOP高级 -- 定制类
__str__ 和 __repr__ :实例对象直接显示字符串
class Student:
def __init__(self, name):
self.name = name def __str__(self):
return "Name: %s" % self.name
__repr__ = __str__
>>> s = Student("Zoro")
>>> s
Out[]: Name: Zoro
# __str__()返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,也就是说,__repr__()是为调试服务的。
__iter__ 和 __next__ : 实例对象能够用于迭代
class Fib:
def __init__(self):
self.a, self.b = , def __iter__(self):
return self def __next__(self):
self.a, self.b = self.b, self.a+self.b
if self.a > :
raise StopIteration
return self.a
>>> f = Fib() >>> for i in f:
...: print(i, end=" ")
...:
# __iter__()方法返回一个迭代对象,然后Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。
__getitem__ : 实例对象可以下标操作
class Fib:
def __getitem__(self, n):
a, b = 1, 1
for i in range(n):
a, b = b, a+b
return a
>>> f = Fib() >>> f[5]
Out[97]: 8 >>> for i in range(20):
print(f[i], end=" ") 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
__getattr__ : 访问不存在的属性时调用
class Student:
def __getattr__(self, attr):
if attr == "age":
return 26
raise AttributeError("'Student' class has no attribute '%s!'" % attr)
>>> s = Student() >>> s.age
Out[117]: 26 >>> s.name
Traceback (most recent call last):
File "<ipython-input-118-35e6ae75375b>", line 1, in <module>
s.name
File "C:/Users/SQD/Desktop/__getattr__.py", line 12, in __getattr__
raise AttributeError("'Student' class has no attribute '%s!'" % attr) AttributeError: 'Student' class has no attribute 'name!'
class Chain(object):
def __init__(self, path=''):
self._path = path def __getattr__(self, path):
return Chain("%s/%s" % (self._path, path)) def __str__(self):
return self._path
__repr__ = __str__
>>> c = Chain() >>> c.status.user.timeline.list
Out[130]: /status/user/timeline/list
__call__ : 直接对实例进行调用
class Student:
def __init__(self, name):
self._name = name def __call__(self):
print("My name is %s" % self._name)
>>> s = Student("Zoro")
>>> s()
My name is Zoro
Python -- OOP高级 -- 定制类的更多相关文章
- Python -- OOP高级 -- 元类
type()函数既可以返回一个对象的类型,又可以创建出新的类型 def fn(self, name="world"): print("Hello, %s!" % ...
- Python -- OOP高级 -- 枚举类
Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较. from enum import Enum Month = Enum('Month', ('Jan', ' ...
- python学习(八)定制类和枚举
`python`定制类主要是实现特定功能,通过在类中定义特定的函数完成特定的功能. class Student(object): def __init__(self, name): self.name ...
- python 面向对象九 定制类
一.定制类,实质就是我们自己重写特殊函数 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道怎么用了,__l ...
- Python基础(定制类)
文章转载自廖雪峰老师Python课程博客,仅供学习参考使用看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道 ...
- Python -- OOP高级 -- __slots__、@property
__slots__属性可以设置 允许被设置的属性 class Student: __slots__ = ("name", "age") >>> ...
- python特殊方法定制类
#coding:utf-8class RoundFloat(object): def __init__(self,val): assert isinstance(val, float),"v ...
- Python OOP(1):从基础开始
本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassName(object): """docstring for ClassNam ...
- <转>Python OOP(1):从基础开始
转自 http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...
随机推荐
- 2015 ACM/ICPC Asia Regional Hefei Online
1001 Monitor the Alpacas 1002 The Relationship in Club 1003 Difference of Clustering 两边离散化.暴力扫C就过了. ...
- display flex 和a标签不行
父元素display: flex; display: -webkit-flex; flex-flow: row wrap; -webkit-flex-flow: row wrap; 配合子元素 fl ...
- 简析TCP的三次握手与四次分手【转】
转自 简析TCP的三次握手与四次分手 | 果冻想http://www.jellythink.com/archives/705 TCP是什么? 具体的关于TCP是什么,我不打算详细的说了:当你看到这篇文 ...
- 对方网络ping不通
后台接口往往部署在其他服务器上如果ping不同 很大可能是因为对方开防火墙的原因 解决方法:控制面板-windows防火墙-打开或关闭windows防火墙
- xtrabackup 2.0.8备份mysql5.1.65报错
sh : xtrabackup not found innobackupex: fatal error: no 'mysqld' group in MySQL options fix: add inn ...
- Hibernate框架--配置,映射,主键
SSH框架: Struts框架, 基于mvc模式的应用层框架技术! Hibernate, 基于持久层的框架(数据访问层使用)! Spring, 创建对象处理对象的依赖关系以及框架整合! Da ...
- POJ 3279 Fliptile[二进制状压DP]
题目链接[http://poj.org/problem?id=3279] 题意:给出一个大小为M*N(1 ≤ M ≤ 15; 1 ≤ N ≤ 15) 的图,图中每个格子代表一个灯泡,mp[i][j] ...
- iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变
可以选择是使用自定制的还是系统的,如果使用自定制的,就使用以下方法即可隐藏系统的uitabbarButton,从而使item恢复正确 //隐藏UITabBarButton -(void)viewWil ...
- VS2010 制作安装包,无法生成卸载快捷方式
目前我出现了这个错误,原因是项目目录中包含了中文字符导致的,我改变了文件夹之后,就没问题了
- VBS获取Ini配置文件一个节点下的所有字段的值
''* 功能:使用VBS读取ini文件中指定节点下的所有值'* 输入参数:inipath :ini文件的地址'* initypes :ini文件中包含在"["和 ...