python基础 类与对象(OOP)

大家好,我是python网络爬虫这门课程的主要讲师geo

如果你只用函数:

  • 数据散落在各处
  • 修改一个逻辑要改一堆地方
  • 项目一大就会失控

而 OOP:

  • 把数据 + 行为「封装」在一起
  • 可读性高
  • 可维护性强
  • 可扩展

面向对象编程 oop

class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        print(f"{self.name} 汪汪叫")

dog = Dog("旺财")
dog.bark()

class Dog:

  • 定义一个类,名字叫 Dog

init

  • 构造函数(初始化方法)
  • 当你 Dog() 的时候自动执行

self

  • 代表“当前这个对象本身”
  • 不是关键字,只是约定

类 class

类 = 模板 / 蓝图 / 说明书

有哪些属性(attributes)

self.name = name

属性 = 对象的状态 / 数据

例如:

  • 狗的名字
  • 年龄
  • 颜色

有哪些行为(methods)

def bark(self):
    print("汪汪")

方法 = 对象能做的事情

所以 :

对象 object

dog 是一个对象(实例)

Dog 是类


面向对象编程继承(Inheritance) 调用子类

在原有基础上继续扩建

# 子类
class PoliceDog(Dog):
    def __init__(self, name, duty):
        # 调用父类的 __init__,把 name 这个属性初始化好
        super().__init__(name)
        self.duty = duty

    def attack(self):
        print(f"{self.name} 正在执行 {self.duty} ,咬!!")

    # 如果我们想要“扩展”父类的方法,也可以先调用 super,然后再加自己的逻辑:
    def bark(self):
        super().bark()       # 先执行原来的 bark
        print("同时发出低沉的警告声...")  # 再扩展新的行为


pd = PoliceDog("黑豹", "巡逻")
pd.bark() # 黑豹 汪汪叫 + 同时发出低沉的警告声...
pd.attack() # 黑豹 正在执行 巡逻 ,咬!!