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就过了. ...
- 新版本的jquery checkbox 全选反选代码只能执行一遍,第二次就失败attr与prop区别
$("#all_check").click(function() { $("input[name='checkShop[]']").attr("che ...
- SQL函数学习(二):DATEADD() 函数
DATEADD() 函数在日期中添加或减去指定的时间间隔. 语法 DATEADD(datepart,number,date) date 参数是合法的日期表达式.number 是您希望添加的间隔数:对于 ...
- FreeMarker 小结
一.Sequence 的内置函数1.sequence?first 返回sequence 的第一个值.2.sequence?last 返回sequence 的最后一个值.3.sequence?rever ...
- Asynchronous JS: Callbacks, Listeners, Control Flow Libs and Promises
非常好的文章,讲javascript 的异步编程的. ------------------------------------------------------------------------- ...
- iOS 视图控制器生命周期
1.init: 2.viewDidLoad: 3.viewWillAppear: 4.viewDidAppear: 5.viewWillDisappear; 6.viewDidDisappear
- 利用Ajax实现前端与.net后端实现数据交互
使用场景和需求:用户在地址栏输入请求地址,先.net服务器发送页面请求,该页面包含Echart图表,在页面中向.net后端发送数据请求,获取数据后,将数据填充到Echart图表中.其中包含带参与不带参 ...
- Qt错误:类中使用Q_OBJECT宏导致undefined reference to vtable for "xxx::xxx"错误的原因和解决方法
在进行Qt编程的时候,有时候会将类的定义和实现都写在源文件中,如果同时在该类中使用信号/槽,那么可能就会遇到 undefined reference to vtable for "xxx:: ...
- java中的静态代码块等执行顺序
http://www.cnblogs.com/naruto469/p/3608459.html public class Print { 2 3 public Print(String s){ 4 S ...
- 网络请求 get post
1.新建一个网络请求工具类,负责整个项目中所有的Http网络请求 提示:同步请求会卡住线程,发送网络请求应该使用异步请求(这意味着类方法不能有返回值) 2.工具类的实现 YYHttpTool.h文件 ...