特殊函数
2018-08-07 本文已影响0人
黑夜的眸
__str__
Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Student(Person):
def __init__(self, name, gender, score):
super(Student, self).__init__(name, gender)
self.score = score
def __str__(self):
return '(Student: {name}, {gender}, {score})'.format(name=self.name,gender=self.gender,score=self.score)
__repr__ = __str__
s = Student('Bob', 'male', 88)
print s
__cmp__
下面的Student 的 cmp 方法,让它按照分数从高到底排序,分数相同的按名字排序:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def __str__(self):
return '(%s: %s)' % (self.name, self.score)
__repr__ = __str__
def __cmp__(self, s):
return cmp(self.name,s.name) if s.score == self.score else cmp(s.score,self.score)
L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 99)]
print sorted(L)
输出结果
[(Alice: 99), (Tim: 99), (Bob: 88)]
__len__
斐波那契数列是由 0, 1, 1, 2, 3, 5, 8...构成。
以下编写了一个Fib类,Fib(10)表示数列的前10个元素,print Fib(10) 可以打印出数列的前 10 个元素,len(Fib(10))可以正确返回数列的个数10。
class Fib(object):
def __init__(self, num):
self.lst = []
self.num = num
a,b = 0,1
for i in xrange(num):
self.lst.append(a)
a,b = b, a+b
def __len__(self):
return self.num
def __str__(self):
return str(self.lst)
f = Fib(10)
print f
print len(f)