zoukankan      html  css  js  c++  java
  • 面向对象之封装、继承

    一、面向对象

    1、创建一个类的基本格式,并调用

    1 class 类名:
    2      def  __init__(self):  # 必写
    3          "数据的封装"
    4      def 方法名(self):
    5          "方法体"
    6 
    7 #   调用
    8 对象名=类名(参数1,参数2....)
    9 对象名.方法名()

    2、构造函数
    类里的__init__方法属于构造函数,其作用是进行数据初始化

    应用:

      (1)将数据分装到对象中,供自己方法调用

     class FileHandler:
         def __init__(self,file_path):
             self.file_path = file_path
             self.f = open(self.file_path, 'rb')
     
          def read_first(self):
                # self.f.read()
              # ...
             pass
     
         def read_last(self):
             # self.f.read()
             # ...
             pass
    
         def read_second(self):
             # self.f...
             # ...
             pass
                                 
     obj = FileHandler('C:/xx/xx.log')
     obj.read_first()
     obj.read_last()
     obj.read_second()
     obj.f.close()        

       (2)、将数据封装到对象中,以供其他函数调用

     1 def new_func(arg):
     2     arg.k1
     3     arg.k2
     4     arg.k6
     5 
     6 class Foo:
     7     def __init__(self,k1,k2,k6):
     8         self.k1 = k1
     9         self.k2 = k2
    10         self.k6 = k6
    11 
    12 obj = Foo(111,22,333)
    13 new_func(obj)

    3、面向对象代码的编写
    方式一:归类+提取公共值

     1 class File:
     2     def file_read(self,file_path):
     3         pass
     4 
     5     def file_update(self,file_path):
     6         pass
     7 
     8     def file_delete(self,file_path):
     9         pass
    10 
    11     def file_add(self,file_path):
    12         pass
    13 
    14 class Excel:
    15     def excel_read(self,file_path):
    16         pass
    17 
    18     def excel_update(self,file_path):
    19         pass
    20 
    21     def excel_delete(self,file_path):
    22         pass
    23 
    24     def excel_add(self,file_path):
    25         pass

    提取公共值

     1 class File:
     2     def __init__(self,file_path):
     3         self.file_path = file_path
     4                             
     5     def file_read(self):
     6         pass
     7 
     8     def file_update(self):
     9         pass
    10 
    11     def file_delete(self):
    12         pass
    13 
    14     def file_add(self):
    15         pass
    16 
    17 class Excel:
    18     def __init__(self,file_path):
    19         self.file_path = file_path
    20                             
    21     def excel_read(self):
    22         pass
    23 
    24     def excel_update(self):
    25         pass
    26 
    27     def excel_delete(self):
    28         pass
    29 
    30     def excel_add(self):
    31         pass

     # 将相同的参数封装在构造函数里,每个方法不需要传参

     方法二:在指定的类中编写和当前类相关的所有代码+提取公共值

     1 class Message:
     2     def email(self):    
     3     pass 
     4                 
     5 class Person:
     6     def __init__(self,na, gen, age, fig)
     7         self.name = na
     8         self.gender = gen
     9         self.age = age
    10         self.fight =fig
    11                         
    12         def grassland(self):    
    13         self.fight = self.fight - 10  
    14                         
    15     def practice(self):
    16         self.fight = self.fight + 90   
    17                         
    18     def incest(self):
    19         self.fight = self.fight - 666
    20                         
    21                 
    22 cang = Person('刘安', '', 18, 1000)   
    23 dong = Person('李静', '', 20, 1800)  
    24 bo = Person('张华', '', 19, 2500)      
    25             
    26 dong.grassland()        

    二、面向对象的三大特性:分装、继承、多态
    1、封装

    1 # 将相关功能封装到一个类中:
    2 class Message:
    3     def email(self):pass
    4     def msg(self):pass
    5     def wechat(self):pass
    1 # 将数据分装到一个对象中:
    2 class Person:
    3     def __init__(self,name,age,gender):
    4         self.name = name
    5         self.age = age
    6         self.gender = gender
    7                         
    8 obj = Person('李静',18,'')

    2、继承,提高代码的重用性
    一个子类可以继承多个父类,当调用的方法在子类里没有时,到父类的方法找,如果有则调用

     1 class SuperBase:
     2     def f3(self):
     3         print('f3')
     4 
     5 class Base(SuperBase):  # 父类,基类
     6     def f2(self):
     7         print('f2')
     8 
     9 class Foo(Base):        # 子类,派生类
    10                     
    11     def f1(self):
    12         print('f1')
    13                         
    14 obj = Foo()
    15 obj.f1()
    16 obj.f2()
    17 obj.f3()

     关于继承的查找顺序

    练习1

     1 class Base1:
     2     def f1(self):
     3         print("base1.1")
     4     def f2(self):
     5         print("base1.f2")
     6     def f3(self):
     7         print("base1.f3")
     8 class Base2:
     9     def f1(self):
    10         print("base2.f1")
    11 class Foo(Base1,Base2):
    12     def f0(self):
    13         print("f00.f0")
    14         self.f3()

    练习2

     1 class Base1:
     2     def f1(self):
     3         print("base1.1")
     4     def f2(self):
     5         print("base1.f2")
     6     def f3(self):
     7         print("base1.f3")
     8 class Base2:
     9     def f1(self):
    10         print("base2.f1")
    11 class Foo(Base1,Base2):
    12     def f0(self):
    13         print("f00.f0")
    14         self.f3()
    15 
    16 obj=Foo()
    17 obj.f0()
  • 相关阅读:
    《软件需求模式》阅读笔记二
    《软件需求模式》阅读笔记一
    《编写有效用例》阅读笔记三
    《编写有效用例》阅读笔记二
    《编写有效用例》阅读笔记一
    《软件需求十步走》阅读笔记三
    英文一分钟自我介绍
    c语言面试常见题
    docker
    LLDP
  • 原文地址:https://www.cnblogs.com/liaopeng123/p/9543256.html
Copyright © 2011-2022 走看看