__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. 洛谷-ISBN号码-简单字符串

    题目描述 Description 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符 ...

  2. ECOS CMD更新

    update update --force-update-db

  3. Hadoop作业优化

    mapper数量 reduce数量 combiner 中间值压缩 自定义序列 调整shuffle,减少溢出写 关闭推测执行 任务JVM重用 慢启动reduce

  4. Repeater控件的嵌套使用

    1.前台代码: <asp:Repeater ID="OrderList" runat="server" onitemdatabound="Ord ...

  5. HDU 5772 String problem

    最大权闭合子图.建图巧妙. 最大权闭合子图: #pragma comment(linker, "/STACK:1024000000,1024000000") #include< ...

  6. Cross compile openwrt

    在Centos7上交叉编译生成OpenWrt固件 安装ss-* 获取最新的ss, 当前是 wget https://github.com/shadowsocks/shadowsocks-libev/a ...

  7. spark java 代码example

    https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples

  8. CSS3秘笈:第十一章

    表格和表单的格式化 1.表格的各种标签提供了许多有用的“钩子”,可以再上面挂CSS样式.如果创建了<th>标签样式,那么每一个列的标题——<th>标签——看起来就有可能与其他的 ...

  9. CF 508D Tanya and Password(无向图+输出欧拉路)

    ( ̄▽ ̄)" //不知道为什么,用scanf输入char数组的话,字符获取失效 //于是改用cin>>string,就可以了 //这题字符的处理比较麻烦,输入之后转成数字,用到函 ...

  10. vim编程配置方法

    vim简介Vim 有以下几个模式:1) 正常(normal)模式,缺省的编辑模式:下面如果不加特殊说明,提到的命令都直接在正常模式下输入:任何其它模式中都可以通过键盘上的 Esc 键回到正常模式.2) ...