zoukankan      html  css  js  c++  java
  • python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

    对象是特征(变量)与技能(函数)的结合体
    是一系列对象共同的特征与技能的集合体

    class teacher:
    
        lesson = "python"
    
        def __init__(self,name,color,age):  # 只干初始化的活
            self.name = name
            if not isinstance(name,str):
                raise TypeError
            self.color = color
            self.age = age
    
        def jineng(self):
            print('新技能')
    
    t1 = teacher('as','pink',13)   # t1可以成为teacher类的一个实例,或对象
    class teacher:
        # 特征
        school = 'oldboy'
        lesson_default = 'python'
    
        # 技能
        def __init__(self,name,age,sex,lesson2):
            self.name = name
            self.age = age
            self.sex = sex
            self.lesson2 = lesson2
        def speak(self):
            print('讲课')
        def eat(self):
            print('吃饭')
    
    t1 = teacher('alex','23','','运维')
    t2 = teacher('egon','24','','运维')


    类的用法一:实例化产生对象
    类的用法二:属性引用
    print(teacher.__dict__)


    # 对象的属性
    # 类的属性

    # 属性,就是一个字典
    # 对象查看一个属性,先从对象属性找,如果没有,就从类找



    继承:
    继承是用来创建新的类的一种方式,好处是可以减少重复代码
    继承是类与类之间的关系,是一种什么是什么的关系

    class People:
        def __init__(self,name,age,sex):
            self.name = name
            self.age = age
            self.sex = sex
        def walk(self):
            print('%s is walking' %self.name)
        def foo(self):
            print('from father %s' %self.name)
    
    class Teacher(People):
        school = 'oldboy'
        def __init__(self,name,age,sex,level,salary):
            People.__init__(self,name,age,sex)
            self.level = level
            self.salary = salary
        def bar(self):
            People.foo(self)
            print('from teacher')
    
    class Student(People):
        pass
    
    t = Teacher('egon',13,'male',10,3000)
    # print(t.name,t.age)
    print(t.__dict__)
    t.walk()
    t.bar()

    组合
    组合是一种什么有什么的关系

    class People:
        def __init__(self, name, age, year, mon, day):
            self.name = name
            self.age = age
            self.birth = Date(year, mon, day)   # 组合
    
        def walk(self):
            print('%s is walking' % 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, year, mon, day, level, salary):
            People.__init__(self, name, age, year, mon, day)
            self.level = level
            self.salary = salary
    
        def teach(self):
            print('%s is teaching' % self.name)
    
    
    class Student(People):
        def __init__(self, name, age, year, mon, day, group):
            People.__init__(self, name, age, year, mon, day)
            self.group = group
    
        def study(self):
            print('%s is studying' % self.name)
    
    t = Teacher('egon', 12, 1991, 12, 12, 10, 1000)
    t.teach()
    t.walk()
    print(t.level)
    print(t.birth.tell_birth())


    接口
    1.子类必须要有父类的方法
    2.子类实现的方法必须跟父类的方法的名字一样

    class File:#定义接口Interface类来模仿接口的概念,python中压根就没有interface关键字来定义一个接口。
        def read(self): #定接口函数read
            pass
    
        def write(self): #定义接口函数write
            pass
    
    class Txt(File): #文本,具体实现read和write
        def du(self):
            print('文本数据的读取方法')
    
        def xie(self):
            print('文本数据的读取方法')
    
    class Sata(File): #磁盘,具体实现read和write
        def read(self):
            print('硬盘数据的读取方法')
    
        def write(self):
            print('硬盘数据的读取方法')
    
    class Process(File):
        def read(self):
            print('进程数据的读取方法')
    
        def write(self):
            print('进程数据的读取方法')
    
    txt=Txt()
    disk=Sata()
    process=Process()
    
    txt.du()
    # disk.read()
    # process.read()
    
    
    
    
    子类实现的方法必须跟父类的方法的名字一样
    import abc
    
    class File(metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def read(self):
            pass
    
        @abc.abstractmethod
        def write(self):
            pass
    
    class Txt(File):  # 文本,具体实现read和write
        def read(self):
            pass
    
        def write(self):
            pass
    
    t = Txt()
     
     
  • 相关阅读:
    pdb文件转
    C#是.NET吗?hr说:我们只招聘C#工程师,你是做.NET的和我们要求不符。。。
    C#中的==、Equal、ReferenceEqual > 转
    常用HTML代码转
    SQL Server数据库字段数据类型
    jQuery性能优化的28个建议 转
    收尾
    OSI七层网络协议之传输层
    将其他程序中的大纲文本插入到 PowerPoint 演示文稿中
    Applet 编程中多媒体文件放置的位置
  • 原文地址:https://www.cnblogs.com/lucaq/p/7119185.html
Copyright © 2011-2022 走看看