Python学习笔记学习笔记(9),,Python面向对象高级特性面向对象高级特性2 — 定制类和定制类和
多重继承多重继承
多重继承多重继承
Python与Java不同,Python可以多重继承,在设计类时,可以考虑MixIn设计,一个类继承多个类,使其具有多个功能。
定制类定制类
介绍了以下几种类的方法:
__str__(), __iter__(), __next__(), __getitem__(), __getattr__(), __call__()
__str__类似java中的toString()方法,print一个类调用的就是类的__str__方法。
class Student:
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student object (name: %s)' % self.name
print(Student('Michael'))
Student object (name: Michael)
直接显示变量调用的不是__str__(),而是__repr__(),__str__返回用户看到的字符串,而__repr__()返回程序开发者看到的字符串,
用于调式服务。通常两个方法代码一样
class Student:
def __init__(self, name):
self.name = name
def __str__(self):
return 'Student object (name: %s)' % self.name
__repr__ = __str__
__iter__类似于Java中的Iterator。一个类想被用于for循环,就必须实现一个__iter__()方法。该方法返回一个迭代对象,循环不断
调用__next__方法获取下一个值,直到遇到StopIteration错误时退出循环。
class Fib:
def __init__(self):
self.a, self.b = 0, 1;
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
if self.a > 20:
raise StopIteration()
return self.a
for n in Fib():
print(n)
1
1
2
3
5
8
13
__getitem__可以使该类像list一样取第几个元素
def getitem(self, n): # 定义getitem函数,也可以在函数定义内定义
a, b = 1, 1
for x in range(n):
a, b = b, a+b
return n
Fib.__getitem__ = getitem # 添加__getitem__ 方法。
f = Fib()
print(f[0])
评论0
最新资源