Python面向对象简单继承

                                 Python面向对象简单继承

 

python是面向对象的语言,它支持继承,即一个类可以继承父类那里属性和方法。本书代码源自<>,通过对代码的解读来解释简单继承的概念,详见代码处注释部分。

# 1 基础的继承V1
class Contact:
    '''定义个通讯录类,有name(姓名)、email(邮件)、通讯列表属性'''
    all_contacts = [] #类变量,此处声明个空的列表。该变量为所有实例所共用,可以类名或者对象名调用
    def __init__(self,name,email):
        self.name=name
        self.email=email
        #self.all_contacts=[]  #如果仅在此处定义则为对象所有
        Contact.all_contacts.append(self) #换做对象调用亦可。
		#self.all_contacts.append(self) #效果同上

class Supplier(Contact):
    '''定义个供应商类继承自通讯录类,定义订单方法'''
    def order(self,order):
        print("'{}' ask for '{}'".format(order,self.name))
if __name__ == '__main__':
    s = Contact('Shenl','[email protected]')
    l= Contact('Liang','[email protected]')
    #print(l.all_contacts) #打印对象的地址
    for inner in s.all_contacts: #变量列表获得对象的name和emai属性
        print(inner.name+"的email是:"+inner.email)
    #初始化继承自Contact的Supplier类,调用order方法
    c = Supplier('Shen','[email protected]')
    c.order('i need milk')
    print("通讯录大小\t"+str(len(c.all_contacts))) #此处all_contacts列表有3个对象

 执行结果:

Shenl的email是:[email protected]
Liang的email是:[email protected]
'i need milk' ask for 'Shen'
通讯录大小	3
# 2 匹配式联系人,继承自内置对象list	
class ContactMatchList(list):
    '''构建一个按照姓名查找联系人信息的对象'''
    def match(self,matchname):
        '''返回通过name(姓名)查找到的联系人对象列表信息'''
        #思路:1 该对象需要继承自list,创建接收(临时)list变量
        # 2 遍历当前list对象,对对象的name属性与传入的name(姓名)进行匹配
        # 3 如果配到则放入自定义list变量
        match_contact=[]
        for i in self:
            if matchname.lower() in i.name.lower():
                match_contact.append(i)
        return match_contact

class Contact:
    '''定义一个联系人类并初始化name,email,匹配联系人类变量'''
    all_contacts = ContactMatchList() #类变量,此处对应到ContactList对象
    def __init__(self,name,email):
        self.name=name
        self.email=email
        self.all_contacts.append(self)

if __name__ == '__main__':
    c = Contact('John C1','[email protected]')
    d= Contact('John D2','[email protected]')
    x = Contact('Tom X2', '[email protected]')
    #print([c.name for c in c.all_contacts.match('john')]) #此处返回的是个迭代器
    for c in c.all_contacts.match('john'):
        print(c.name)

执行结果:

John D2
Tom X2

 

你可能感兴趣的:(Python案例)