类变量与self变量
示例 1:
class Contact:
all_contacts = []
def __init__(self, name, email):
self.name = name
self.email = email
知识点:
(1)类定义首行可以写成等效的:
class Contact(object):
#或
class Contact():
所有的Python 类都是特殊的object类的子类。示例中:object是Contact类的父类【超类supper】
(2)类变量:all_contacts 列表,由于它是类定义的一部分,故被这个类的所有实例对象所共享,有点像C++类内的静态变量。这意味着只有一个Contact.all_contacts 列表,可以通过Contact.all_contacts 访问。当然也可以用"self.all_contacts"来访问。
内置类扩展-继承于内置类
示例 2:扩展内置对象
class ContactList(list):
def search(self, name):
'''Return all contacts that contain the search value in their name.'''
matching_contacts = []
for contact in self:
if name in contact.name:
matching_contacts.append(contact)
return matching_contacts
class ContactList(list):通过类继承扩展了list的功能.
完整代码:
class ContactList(list):
def search(self, name):
matching_contacts = []
for contact in self:
if name in contact.name:
matching_contacts.append(contact)
return matching_contacts
class Contact:
all_contacts = ContactList()
def __init__(self, name, email):
self.name = name
self.email = email
self.all_contacts.append(self)
class Supplier(Contact):
def order(self, order):
print("If this were a real system we would send ""'{}' order to '{}'".format(order, self.name))
解释:同一模块中的类之间的定义与调用存在顺序结构要求:上述Contact调用all_contacts = ContactList()实例化时,必须先存在class ContactList(list):定义。