__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高级 -- 定制类的更多相关文章

  1. Python -- OOP高级 -- 元类

    type()函数既可以返回一个对象的类型,又可以创建出新的类型 def fn(self, name="world"): print("Hello, %s!" % ...

  2. Python -- OOP高级 -- 枚举类

    Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较. from enum import Enum Month = Enum('Month', ('Jan', ' ...

  3. python学习(八)定制类和枚举

    `python`定制类主要是实现特定功能,通过在类中定义特定的函数完成特定的功能. class Student(object): def __init__(self, name): self.name ...

  4. python 面向对象九 定制类

    一.定制类,实质就是我们自己重写特殊函数 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道怎么用了,__l ...

  5. Python基础(定制类)

    文章转载自廖雪峰老师Python课程博客,仅供学习参考使用看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道 ...

  6. Python -- OOP高级 -- __slots__、@property

    __slots__属性可以设置 允许被设置的属性 class Student: __slots__ = ("name", "age") >>> ...

  7. python特殊方法定制类

    #coding:utf-8class RoundFloat(object): def __init__(self,val): assert isinstance(val, float),"v ...

  8. Python OOP(1):从基础开始

    本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassName(object): """docstring for ClassNam ...

  9. <转>Python OOP(1):从基础开始

    转自  http://www.cnblogs.com/BeginMan/p/3510786.html 本文旨在Python复习和总结: 1.如何创建类和实例? # 创建类 class ClassNam ...

随机推荐

  1. 【Machine Learning in Action --5】逻辑回归(LogisticRegression)

    1.概述 Logistic regression(逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性. 在经典之作<数学之美>中也看到了它用于广告预测,也就是根据某广告被 ...

  2. 关于maven相互依赖的工程部署问题

    环境:win7 64位,myeclipse10.6,eclipse4.5,都配置了svn插件 问题描述:1.工程模块化之后都是通过pom配置model来关联的,svn提交之后,通过myeclipse的 ...

  3. ControlTemple样式

    1.TextBox 样式 1.1 style <Window.Resources> <Style x:Key="aa" TargetType="{x:T ...

  4. sha加密算法

    密钥生成 公钥(e,n)  私钥(d,n) 找两个互质的大素数p和q, 计算n=p*p, f(n)=(p-1)*(q-1) 选择随机整数e(e和f(n)互质) de=f(n)mod 1 利用公钥加密 ...

  5. 让上下两个DIV块之间有一定距离或没有距离

    1.若想上下DIV块之间距离,只需设定:在CSS里设置DIV标签各属性参数为0div{margin:0;border:0;padding:0;}这里就设置了DIV标签CSS属性相当于初始化了DIV标签 ...

  6. OC-之AFNetworking与ASIHTTPRequest对比

    一.底层实现 1.AFN的底层实现基于OC的NSURLConnection和NSURLSession 2.ASI的底层实现基于纯C语言的CFNetwork框架 3.因为NSURLConnection和 ...

  7. POJ 2536 Gopher II

    二分图的最大匹配 地鼠内部和地鼠洞内部都是没有边相连的,那么就可以看成一个二分图.地鼠如果可以跑到那个地鼠洞,就连一条边,然后跑二分图的最大匹配,最后地鼠的数量减去最大匹配数就是答案. #includ ...

  8. CSS3秘笈:第一章

    1.<div>和<span>标签: <div>和<span>标签:就像是一个空的容器,我们要往里面填充内容.一个div就是一个块,意味着它的前后都要空一 ...

  9. openwrt makefile选项

    Package/conffiles (optional) 由该包安装的配置文件的列表,一行一个文件. BuildPackage宏 最重要的一个宏是 BuildPackage.它会在 Makefile ...

  10. <marquee>,视频和音频的插入,正则表达式

    1.marquee 页面的自动滚动效果,不仅可以移动文字,也可以移动图片表格. <marquee></marquee>之间加内容即可. marquee的属性 1.滚动方向dir ...