zoukankan      html  css  js  c++  java
  • 封装/多态/继承

    面向对象

    • 封装思想:将同一类的函数函数封装到同一个py文件中,方便调用

    • 面向对象也有封装的作用,将同一类的函数封装到一个类中

    • 多态(鸭子模型):多种类型/多种形态

      #,什么是鸭子模型
      对于一个函数,python对于参数的类型不会限制,传入参数时就可以是各种类型,但是在函数中如果有类似于索引等特有方法,就会对传入的参数类型有一个限制(类似于字符串的.append.send方法)
      类似于上述的函数我们认为只要能呱呱叫的就是鸭子(只要有.send方法,就是我们要想的类型)
      # Python
      def func(arg):
          v = arg[-1] # arg.append(9)
          print(v)
      
      # java
      def func(str arg):
          v = arg[-1]
          print(v)
      

    1.面向对象基本用法

    1.1基本格式

    class 类名:
        def __init__(self,x):
            self.x = x
        def 方法名字 (self):   #函数在类里称为方法,self就是固定参数,必须写self
            print('方法')
            return 
        def 方法名字 (self):   
            print('方法')
            return 
    #实例化一个类的对象
    v1 = 类(可以传参)
    v2.方法()
    

    1.2调用方法

    1. 创建类的对象(实例化对象)

      obj=类名() #创建了一个Account类的对象

    2. 使用对象调用类的方法

      obj.函数名字()调用时方法是有返回值的,与函数类似

    • 应用场景:
     - 函数(业务功能)比较多,可以使用面向对象来进行归类。
     - 想要做数据封装(创建字典存储数据时,面向对象)。
     - 游戏示例:创建一些角色并且根据角色需要再创建人物。
    

    1.3对象的作用

    • 存储一些值,方便自己使用

      class file:
          def read(self):
              with open(self.xxx, mode='mode='r', encoding='utf-8') as f:
                  data = f.read()
              return data
      
          def write(self,content):
              with open(self.xxx, mode='mode='a', encoding='utf-8') as f:
                  f.write(content)
      
      # 实例化一个file的对象
      v1 = file()
      # 在对象中写了一个xxx='test.log'
      v1.xxx = 'test.log'
      # 通过对象调用类中的read方法,read方法中的self就v1:
      #v1.read()
      obj1.write('alex')
      

    1.4类的初始化方法

    • 类() 实例化对象,自动执行此类中的 __ init __方法。
    • __ init __ 初始化方法(构造方法),为对象内部做初始化
    • 如果有一个反复使用的公共值,课可以放到对象中
    class Person:
        def __init__ (self,n,a,g):
            self.name=n
            self.age =a
            self.gender= g
        def show(self):
            temp= '我是%s,今年%s,性别%s'%(self.name,self.age,self.gender)
            print(temp)
    # 类() 实例化对象,自动执行此类中的 __init__方法。
    p1 = Person('bigox',20,'男')
    p1 = show()
    

    2.面向对象的三大特性

    2.1封装

    class File:
        def read(self):
            pass
        def write(self):
            pass
    
    class Person:
        def __init__(sef,name,age):
            self.name = name
            self.age = age
    p = Person('alex',19)
    

    2.2继承

    #基本格式
    class Base:
        pass
    class Foo(Base):
        pass
    
    • 在多个类中如果有公共的方法,可以使用继承,增加代码的重用性.

    • 继承关系中查找方法的顺序

      • self是谁?
      • self是哪个类创建的,就从此类开始找,自己没有就找父类
    • 多继承就从左往右

      # 父类(基类)
      class Base:
          def f1(self):
              pass
      # 子类(派生类)
      class Foo(Base):
          def f2(self):
              pass
      
      # 创建了一个字类的对象
      obj = Foo()
      # 执行对象.方法时,优先在自己的类中找,如果没有就是父类中找。
      obj.f2()
      obj.f1()
      
      # 创建了一个父类的对象
      obj = Base()
      obj.f1()
      
      

    2.3多态

    对于一个函数,python对于参数的类型不会限制,传入参数时就可以是各种类型,但是在函数中如果有类似于索引等特有方法,就会对传入的参数类型有一个限制(类似于字符串的.append.send方法)
    类似于上述的函数我们认为只要能呱呱叫的就是鸭子(只要有.send方法,就是我们要想的类型)
    # Python
    def func(arg):
        v = arg[-1] # arg.append(9)
        print(v)
    
    # java
    def func(str arg):
        v = arg[-1]
        print(v)
    
    
  • 相关阅读:
    去除aspx生成的页面最开始的空行
    单个方框内图片垂直水平居中和等比例缩小(支持所有浏览器)
    .net里怎样在Main方法之前执行代码?
    WIN7系统盘空间不够用解决办法
    语音识别工具箱之HTK安装与使用
    一个VC中的DLL导出类的例子
    c++ 随机数 产生不重复的随机数
    android开发 NDK 编译和使用静态库、动态库
    c++指针 初识
    c++ UTF8和Unicode 互转
  • 原文地址:https://www.cnblogs.com/bigox/p/10771126.html
Copyright © 2011-2022 走看看