zoukankan      html  css  js  c++  java
  • 面向对象的简单理解以及代码

    面向对象
    面向对象的四大特性:封装 继承 多态 抽象

    简单介绍面向对象的四大特性,主要是根据代码理解。

    封装

    隐藏对象的属性和实现细节,仅对外提供公共的访问方式

    好处:
    1.将变化隔离
    2.便于使用
    3.提高复用
    4.提高安全性

    原则:
    1.将不需要向外提供的的数据内容隐藏
    2.把属性都隐藏,只提供对外访问的公共接口


    多态

    多态是指同一事物的不同形态,例如动物可以分为:猫,狗,猪。其中动物是事物,猫狗猪是形态。


    抽象
    如果说类是在一堆对象中抽取相同的内容,那么抽象类就是在一堆类中抽取相同的内容而来,内容就包括数据属性和相同属性。
    抽象的特征是只能被继承,而不能被实例化。


    继承
    继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类

    python中类的继承分为:单继承和多继承

    单继承:

    一个子类只继承一个父类。

    子类在继承的时候,在定义类时,小括号()中为父类的名字
    父类的属性、方法,会被继承给子类

    多继承:

    一个子类继承多个父类。

    多继承可以继承多个父类,也继承了所有父类的属性和方法
    注意:如果多个父类中有同名的 属性和方法,则默认使用第一个父类的属性和方法

    多个父类中,不重名的属性和方法,不会有任何影响。

    注意!
    父类的私有属性和方法不会被继承。

    当前类或者父类继承了object类,那么该类称之为新式类,否则称之为经典类。

    Python的类可以继承多个类,Python的类如果继承了多个类,那么其寻找方法的方式有两种
    当类是经典类时,多继承情况下,会按照深度优先方式查找 py3
    当类是新式类时,多继承情况下,会按照广度优先方式查找 py2
    简单点说就是:经典类是纵向查找,新式类是横向查找
    经典类和新式类的区别就是,在声明类的时候,新式类需要加上object关键字。在python3中默认全是新式类

    代码

    #  封装 
    
    class Student(object):
        def __init__(self, name, score): 
             self.name = name
             self.score = score
    
        def print_score(self):
             print("{self.name}'s score is: {self.score}".format(self=self))       
            
        def compare(self,s):
             if self.score>s:
                 print("better than %d" %(s))
             elif self.score==s:
                 print("equal %d" %(s))
             else:
                print("lower than %d" %(s))
     
    May = Student("May",90)        
    Peter = Student("Peter",85)        
     
    May.print_score()
    Peter.print_score()
    
    May.compare(100)
    May.compare(90)
    May.compare(89)
    
    
    
    # 多态
    
    
    #创建汉堡的父类,并根据父类创建几个子类
    class Hamburger:
        def make(self):
            print("您没有正确选择要制作的汉堡,请重新输入")
    class FishHamburger(Hamburger):
        def make(self):
            print("您的鱼肉汉堡已经制作好了")
    class BeafHamburger(Hamburger):
        def make(self):
            print("您的牛肉汉堡已经制作好了")
    class ChickenHamburger(Hamburger):
        def make(self):
            print("您的鸡肉汉堡已经制作好了")
    #工厂类,用来判断用户输入的值并创建相应的对象
    class HamburgerFactory:
        @classmethod
        def getinput(cls,temp):
            if temp=="1":
                ch=FishHamburger()
            elif temp=="2":
                ch=BeafHamburger()
            elif temp=="3":
                ch=ChickenHamburger()
            else:
                ch=Hamburger()
            return ch
    #主方法,通过用户输入的值调用工厂的类方法
    while True:
        temp=input("请输入您要制作汉堡的序号,1.鱼肉汉堡,2.牛肉汉堡,3.鸡肉汉堡")
        if temp=="1" or temp=="2" or temp=="3":
            ch=HamburgerFactory.getinput(temp)
            ch.make()
            break
        else:
            ch=Hamburger()
            ch.make()
            continue
    
    
    
    # 单继承
    
    class  Master(object):
      def __init__(self):
          self.kongfu="古法煎饼果子配方"
    
      def  make_cake(self):
          print("按照<%s>只做了一份煎饼果子"%self.kongfu)
    
    
    class  Prentice(Master):
           pass
    
    laoli=Master()
    print(laoli.kongfu)
    laoli.make_cake()
    
    damao=Prentice()
    print(damao.kongfu)
    damao.make_cake()
    
    
    # 多继承
    class Master(object):
       def  __init__(self):
           self.kongfu="古法煎饼果子配方"
    
       def  make_cake(self):
            print("按照<%s>只做了一份煎饼果子"%self.kongfu)
    
    class  School(object):
         def  __init__(self):
              self.kongfu="现代煎饼果子配方"
    
         def make_cake(self):
              print("[现代]按照<%s>只做了一份煎饼果子"%self.kongfu)
    
    class Prentice(Master,School):#多继承,继承了多个父类
         def __init__(self):
              self.kongfu="猫氏煎饼果子配方"
    
         def make_cake(self):
              print("[猫氏]按照<%s>只做了一份煎饼果子"%self.kongfu)
    
    damao=Prentice()
    print(damao.kongfu)
    damao.make_cake()
    
    print(Prentice.__mro__)
    
    
     
    # 抽象
    
    import abc #利用abc模块实现抽象类
    
    class All_file(metaclass=abc.ABCMeta):
        all_type='file'
        @abc.abstractmethod #定义抽象方法,无需实现功能
        def read(self):
            '子类必须定义读功能'
            pass
    
        @abc.abstractmethod #定义抽象方法,无需实现功能
        def write(self):
            '子类必须定义写功能'
            pass
    
    
    class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('文本数据的读取方法')
    
        def write(self):
            print('文本数据的读取方法')
    
    class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('硬盘数据的读取方法')
    
        def write(self):
            print('硬盘数据的读取方法')
    
    class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('进程数据的读取方法')
    
        def write(self):
            print('进程数据的读取方法')
    
    wenbenwenjian=Txt()
    
    yingpanwenjian=Sata()
    
    jinchengwenjian=Process()
    
    #这样大家都是被归一化了,也就是一切皆文件的思想
    wenbenwenjian.read()
    yingpanwenjian.write()
    jinchengwenjian.read()
  • 相关阅读:
    Android WiFi系统【转】
    TCP服务器端和客户端程序设计【转】
    Ubuntu apt-get update 失败【转】
    AiCloud 2.0 AT开发文档【转】
    【转】简单几步让App Store软件下载快如迅雷 -- 不错!!!
    【转】Mac用户必备!100多款免费实用的苹果Mac软件大搜集
    【转】Mac QQ截图保存在哪里?
    【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 三)
    【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 二)
    【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 一)
  • 原文地址:https://www.cnblogs.com/chengdongzi/p/10881031.html
Copyright © 2011-2022 走看看