特殊函数

__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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • __call__在Python中,函数其实是一个对象:>>> f = abs>>> f.__name__'abs'...
    MiracleJQ阅读 1,846评论 1 0
  • __getattr__(): 当调用不存在的属性时调用此方法来尝试获得属性 __init__(): 实例化类时,会...
    MORESIR阅读 1,846评论 0 0
  • 在Python中,有几个特别的函数,它们常常被看做是Python能够进行所谓“函数式编程”的见证。它们是:filt...
    冬季恋歌1218阅读 4,326评论 0 1
  • 要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...
    victorsungo阅读 5,506评论 0 6
  • 日线机会: 1、硅铁多 2、PVC多 3、豆粕多 4、白糖空 周线机会: 可观察豆油空
    hillfuture阅读 968评论 0 0