特殊函数

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)
上一篇下一篇

猜你喜欢

热点阅读