zoukankan      html  css  js  c++  java
  • python类继承和组合

    在python3中所有类默认继承object,凡是继承了object的类都成为新式类,以及该子类的子类Python3中所有的类都是新式类,没有集成object类的子类成为经典类(在Python2中没有集成object的类以及它的子类都是经典类

    继承式用来创建新的类的一种方式,好处是减少重复代码

    class People:
        def __init__(self,name,age):
            self.name=name
            self.age=age
        def walking(self):
            print('%s is walking ' %self.name)
        def talking(self):
            print('%s is talking '%self.name)
    
    
    class Teacher(People):
        pass
    class Student(People):
        pass
    
    t1=Teacher('egon',18)
    print(t1.name,t1.age)
    t1.walking()
    t1.talking()
    s1=Student('xiaobai',22)
    print(s1.name,s1.age)
    s1.talking()
    s1.walking()
    执行结果
    egon 18
    egon is walking 
    egon is talking 
    xiaobai 22
    xiaobai is talking 
    xiaobai is walking 
    class People:
        def __init__(self,name,age,sex):
            self.name=name
            self.age=age
            self.sex=sex
        def walking(self):
            print('%s is walking ' %self.name)
        def talking(self):
            print('%s is talking '%self.name)
    
    
    class Teacher(People):
        def __init__(self,name,age,sex,level,salary):
            People.__init__(name,age,sex)
            self.level=level
            self.salary=salary
        def teaching(self):
            People.talking(self)
            print('%s is teaching'%self.name)
    class Student(People):
        def __init__(self,name,age,sex,group):
            People.__init__(name,age,sex)
            self.group=group
        def studying(self):
            People.talking(self)
            print('%s is studying'%self.name)

    组合

    class Date:
        def __init__(self,year,mon,day):
            self.year=year
            self.mon=mon
            self.day=day
        def tell_birth(self):
            print('出生于<%s>年 <%s>月 <%s>日'%(self.year,self.mon,self.day))
    
    
    class Teacher:
        def __init__(self,name,age,sex,year,month,day):
            self.name=name
            self.age=age
            self.sex=sex
            self.birth=Date(year,month,day)
        def teaching(self):
            print('%s is teaching'%self.name)
    class Student:
        def __init__(self,name,age,sex,year,mon,day):
            self.name=name
            self.age=age
            self.sex=sex
            self.birth=Date(year,mon,day)
        def studying(self):
            print('%s is studying'%self.name)
    
    xiaobai=Student('xiaobai',22,'male','1995','3','16')
    xiaobai.birth.tell_birth()
    执行结果
    出生于<1995>年 <3>月 <16>日

    继承和组合

    class People:
        def __init__(self,name,age,sex,year,mon,day):
            self.name=name
            self.age=age
            self.sex=sex
            self.birth=Date(year,mon,day)
        def walking(self):
            print('%s is walking ' %self.name)
        def talking(self):
            print('%s is talking '%self.name)
    
    class Date:
        def __init__(self,year,mon,day):
            self.year=year
            self.mon=mon
            self.day=day
        def tell_birth(self):
            print('出生于<%s>年 <%s>月 <%s>日'%(self.year,self.mon,self.day))
    
    class Teacher(People):
        def __init__(self,name,age,sex,level,salary,year,mon,day):
            People.__init__(self,name,age,sex,year,mon,day)
            self.level=level
            self.salary=salary
        def teaching(self):
            People.talking(self)
            print('%s is teaching'%self.name)
    class Student(People):
        def __init__(self,name,age,sex,year,mon,day,group):
            People.__init__(self,name,age,sex,year,mon,day)
            self.group=group
        def studying(self):
            People.talking(self)
            print('%s is studying'%self.name)

    父类要限制
    1、子类必须有父类的方法
    2、子类实现的方法必须跟父类的方法的名字一样

    import abc
    
    class File(metaclass=abc.ABCMeta):
        @abc.abstractclassmethod
        def read(self):
            pass
        @abc.abstractclassmethod
        def write(self):
            pass
  • 相关阅读:
    phpmyadmin的root密码忘记了怎么办?
    ASP.NET中控件命名规则
    jQuery选择器大全
    扫描二维码自动识别手机系统(Android/IOS)
    修改Windows Server 2008+IIS 7+ASP.NET默认连接限制,支持海量并发连接数
    Sublime Text 2/3安装使用及常用插件
    【boost】使用装饰者模式改造boost::thread_group
    【VC】VC工具栏图标合并工具(非tbcreator和visual toolbar)
    【boost】使用lambda表达式和generate_n生成顺序序列
    【boost】BOOST_LOCAL_FUNCTION体验
  • 原文地址:https://www.cnblogs.com/c491873412/p/7112668.html
Copyright © 2011-2022 走看看