特殊方法
特殊方法定义在class中;调用时只需实现调用的和关联的方法;
__str__()和__repr__()
将类作为属性直接访问
# -*- coding: utf-8 -*-
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return '(Person: %s, %s)' % (self.name, self.age)
p1 = Person('p1', 20)
print p1
结果:
(Person: p1, 20)
Python 定义了**__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()**用于显示给开发人员。
__cmp__
对 int、str 等内置数据类型排序时,Python的 sorted() 按照默认的比较函数 cmp 排序,但是,如果对一组 Student 类的实例排序时,就必须提供我们自己的特殊方法 cmp():
# -*- coding: utf-8 -*-
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return '(Person: %s, %s)' % (self.name, self.age)
__repr__ = __str__
def __cmp__(self, s):
if self.name < s.name:
return -1
elif self.name > s.name:
return 1
else:
return 0
L = [Person('pa1', 20), Person('pb2', 20), Person('pb1', 20)]
print sorted(L)
结果:
[(Person: pa1, 20), (Person: pb1, 20), (Person: pb2, 20)]
__len__()
返回元素的个数。
类型转换
print int(12.34)
print float(12)
结果:
12
12.0
@property
第一个score(self)是get方法,用@property装饰,第二个score(self, score)是set方法,用@score.setter装饰,@score.setter是前一个@property装饰后的副产品。
__slots__
__slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存。
__call__()
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法**__call__()**。