__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. 多线程---同步函数的锁是this(转载)

    class Ticket implements Runnable { private int tick = 100; Object obj = new Object(); boolean flag = ...

  2. java innerclass

    ---恢复内容开始--- 内部类: public class Inner{ public class Inner2{} } 创建内部类对象 .new public class Test {    in ...

  3. 锅巴H264播放器地址和说明

    锅巴H264播放器地址和说明 软件说明:  此工具专门用来播放安防监控行业的H264录像文件,不管是哪个设备厂家的视频协议,只要您的录像文件里有 H264数据,就可以播放. 备注: 因为被一些事情的影 ...

  4. 关于 HIVE Beeline 问题

    1  启动 hiveserver2 服务,启动 beeline -u jdbc:hive2:// 正常 ,启动 beeline -u jdbc:hive2://127.0.0.1:10000 包如下错 ...

  5. shell脚本调试方法

    我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用 Shell 调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工 ...

  6. SPI模式下MCU对SD卡的控制及操作命令(转)

    源:SPI模式下MCU对SD卡的控制及操作命令 一.前言 SD 卡有两个可选的通讯协议:SD 模式和 SPI模式 SD 模式是SD 卡标准的读写方式,但是在选用SD 模式时,往往需要选择带有SD 卡控 ...

  7. MS13-069(CVE-2013-3205) CCaret use-after-free Vulnerability Analysis (2014.9)

    MS13-069(CVE-2013-3205) CCaret use-after-free Vulnerability Analysis 1. Introduction In IE's standar ...

  8. 《Think in UML》读后感

  9. php扩展memcache的安装

    1.安装memcache服务器 Memcached作为开放.免费.高效的.分布式的内存缓存系统受到很多网站的欢迎. 官网下载memcached源代码安装包,稳定版即可 官网:http://memcac ...

  10. grub4dos新手指南-1

    对于多数没有或很少接触过linux的windows用户来说,刚开始使用grub时离不开菜单.也就是说,使用grub前,我们要准备menu.lst文件.先讲一些最为常用的命令help用来显示其它命令的用 ...