Python基础之面向对象

时间:2022-07-08 21:54:01
  • 学习目录

    • 面向对象
    • 定义
    • 类实例化
    • 继承与重写

0x01 面向对象(OOP)

  • 类(class)
    • 描述具有相同的属性和方法的对象集合
    • 定义了该集合中每个对象所共有的属性和方法
    • 对象是类的实例
  • object对象
    • 一个对象即是一个类的实例化后实例
    • 一个类必须经过实例化后,才能在程序内调用
    • 一个类可以实例化多个对象,每个对象亦有不同属性
  • 类变量
    • 类变量在整个实例化的对象中是公用的
    • 类变量定义在类中且在函数体之外
    • 类变量通常不作为实例变量使用
  • 数据成员
    • 类变量或者实例变量用于处理类及其实例对象的相关的数据
  • 方法重写
    • 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖,也称为方法的重写。
  • 实例变量
    • 定义在方法中的变量,只作用于当前实例的类
  • 封装
    • 在类中对数据赋值、内部调用时对外部用户是透明的,使类变成一个容器,其中包含着类的数据和方法
  • 继承
    • 一个类派生出子类
    • 在父类里定义的属性、方法被子类继承
  • 多态
    • 一个接口, 多种实现
    • 基类中派生出不同子类, 且每个子类继承同样的方法名和同事对父类方法进行不同的实现
    • 编程是对具体对象继续抽象的过程
    • 多态是抽象画的表现形式

0x02 定义

  • 定义
    • 面向对象很重要的载体
    • 类里面一般都是由多个函数组成,函数第一个参数默认是self
    • 若需要全局变量,在类的内部直接定义
    • 类的内部在调用函数或调用变量时,必须使用self.[变量/函数]
    • self代表类实例化后的个体
  • 格式
class StuentName(object):
    pass
  • 原则
    • 重复代码降低水平,消耗资源
    • 可读性好、以扩张(经常变更)
  • 类定义
    ```
    class Pople(object): # 定义类
    age = 15 # 类变量
    def init(self, name, sex, age): # 构造函数,初始化
    # 构造函数: 实例化时对类进行初始化
    self.name = name # 实例变量(静态属性),赋值给实例
    self.sex = sex
    self.age = age
    def bulk(self): # 类方法,功能(动态属性)
    print(" {0}: wang wang wang!".format(self.name))
# 实例化: 把一个类变成具体对象的过程
d1 = Dog("Robin")                   # 实例化并传参(初始化类)
d2 = Dog("Jone")
d1.bulk()                           # 调用类方法
d2.bulk()
```

0x03 类实例化

  • 类实例化
    • 实例化类的首字母小写作为实例,然后实例化类
  • 类的定义及调用方式

    class Stuent(object):
        name = "Chow"
        def hello(self):
            print("Hello {0}".format(self.name))     # 调用变量,self.变量名   
        def python(self):
            self.hello()                             # 调用函数,self.函数   
            print("This is test.")
  • 实例化类

    studentName = Stuent();
  • 类的构造器
    • 类在初始化时,首先、必须要执行的函数
  • 类的构造(实例化类)

    class Status(object):
        def __init__(self, name):
            self.name = name
            print("init class Status")
        def hello(self):
            print("Hello {0}".format(self.name))
    a = Status("Chow")         # 实例化类
    a.hello()                  # 调用类里面函数 

0x04 继承与重写

  • 继承
    • 多继承时, 若父类中都有相同方法。谁在前,即使用最前方法
  • 重写
    • 调用时, 先去找子类中方法,若子类中找不到对应方法,则取父类中查找
  • 继承及重写

    class Animal(object):         # 动物类, 父类
        def __init__(self, name):
            print("现在正在初始化一个Animal类.")
        def run(self):
            print("Animal can run.")
    class Bird(Animal):           # 鸟,子类,继承Animal类属性
        def __init__(self):
            print("鸟猫,Fly Fly Fly")
        def fly(self):
            print("Bird can fly.")
    class Cat(Animal):            # 猫, 继承Animal类,并进行重写
        def __init__(self, name, sex):
            self.name = name
            self.sex = sex
            super(Cat, self).__init__(self.name)    # 继承类并进行传参
            print("一只猫,miao miao miao")
        def jiao(self):
            print("miao miao miao.")
        def run(self):            # 继承父类,并重写父类函数
            print("一只猫, 会上树来会跑路.")
    class BianYi(Cat, Bird):     # 变异类
        pass
    # animal = Animal()              # 实例化
    # cat = Cat("mao", "man")        # 实例化
    # cat.run()                      # 调用方法
    bianyi = BianYi()