首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python进阶定制类和特殊方法,你还知道其它方法吗?

今天给大家分享python特制类的特殊方法

什么是特殊方法

特殊方法定义在calss中

不需要直接调用

Python的某些函数或操作符会调用对应的特殊方法

-1.1 str和__repr__

如果要把一个类的实例变成 str,就需要实现特殊方法str():

class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender)

现在,在交互式命令行下用 print 试试:

>>> p = Person('Bob', 'male')>>> print p(Person: Bob, male) 但是,如果直接敲变量 p:>>> p

似乎str() 不会被调用。

因为 Python 定义了str()和repr()两种方法,str()用于显示给用户,而repr()用于显示给开发人员。

有一个偷懒的定义repr的方法:

class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return '(Person: %s, %s)' % (self.name, self.gender) __repr__ = __str__

-1.2 cmp

对 int、str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 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): if self.name s.name: return 1 else: return 0

上述 Student 类实现了cmp()方法,cmp用实例自身self和传入的实例 s 进行比较,如果 self 应该排在前面,就返回 -1,如果 s 应该排在前面,就返回1,如果两者相当,返回 0。

Student类实现了按name进行排序:

>>> L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 77)]>>> print sorted(L) [(Alice: 77), (Bob: 88), (Tim: 99)]

注意: 如果list不仅仅包含 Student 类,则 cmp 可能会报错:

-1.3 len

如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数。

要让 len() 函数工作正常,类必须提供一个特殊方法len(),它返回元素的个数。

例如,我们写一个 Students 类,把名字传进去:

class Students(object): def __init__(self, *args): self.names = args def __len__(self): return len(self.names)

只要正确实现了len()方法,就可以用len()函数返回Students实例的“长度”:

>>> ss = Students('Bob', 'Alice', 'Tim')>>> print len(ss)3

好了,今天就分享到这里,有想学习Python编程的伙伴们,欢迎留言和小编交流学习,最后祝大家早日成为Python大牛!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180202A07M6M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券