Python学习随笔六:抽象之面向对象

本文介绍了Python面向对象编程的核心概念,包括类和类型的定义、继承、多态等,并通过实例展示了如何创建自己的类、继承和使用多态。

写在前面

本节将总结Python的核心概念——创建自己的对象(尤其是类型或者被称为类的对象):

  • 类和类型
  • 继承
  • 多态

基本概念

类可以或多或少的视为种类或者类型的同义词。如鸟类是一个通用的的类,百灵鸟是鸟类的一个子类,而鸟类则是百灵鸟的超类。特定的一只百灵鸟则是类中的对象。

  • 创建自己的类
class Person:
    def setName(self,name):
        self.name = name
    def getName(self):
        return self.name
    def greet(self):
        print("Hello, world! I'm %s." % self.name)

p.s.
1、使用class关键字
2、关键词后面为类名,通常为大写开头的单词
3、最后为指定继承的超类
4、定义的函数都有不可或缺的参数self,表示对象自动将自己作为第一个参数传入函数中,没有self的话成员方法就没法访问他们要对其特性进行操作的对象本身了。

  • 创建类的实例
>>> foo = Person()
>>> bar = Person()
>>> foo.setName('Ada Xia')
>>> bar.setName('Elan Zhang')
>>> foo.greet()
Hello, world! I'm Ada Xia.
>>> bar.greet()
Hello, world! I'm Elan Zhang.

foo.greet()可以看作Person.greet(foo)方便的简写

  • 插入代码 Ctrl + K

继承

基本概念

函数解决了同一段代码运行多次的问题。然而,如果已经有了一个类,而又想建立一个知识添加几个方法的新类,就可以用到继承

指定超类

子类可以可以扩展超类的定义,将其他类名写在class语句后的圆括号里可以指定超类:

class Filter:#定义一个过滤的通类,实际不作任何操作
  def init(self):
    self.bloced = []
  def filter(self, sequence):
    return [x for x in sequence if x not in self.blocked]
        #列表生成器,生成满足x not in self.blocked的list
>>> f = Filter()
>>> f.init()
>>> f.filter([1,2,3])
[1, 2, 3]
class SPAMFilter(Filter):#Filter的子类
    def init(self):
        self.blocked = ['SPAM']#可以将序列中的”SPAM”过滤出去
>>> s = SPAMFilter()
>>> s.init()
>>> s.filter(['SPAM','SPAM','SPAM','egg','bacon','SPAM']
['egg', 'bacon']

p.s.
1.这里用提供新定义的方式重写了Filter的init定义
2.filter方法的定义是从Filter类中继承

多个超类

class Calculator:
    def calculate(self,expression):
        self.value = eval(expression)
class Talker:
    def talk(self):
        print('Hi, my value is ',self.value)
class TalkingCalculator(Calculator,Talker):
    pass
>>> tc= TalkingCalculator()
>>> tc.calculate('1+2*3')
>>> tc.talk()
Hi, my value is  7

上述行为称为多重继承。在多重继承中,先继承的类中的方法会重写后继承的类中的方法。

多态

有多种形式。多态意味着就算不知道变量所引用的对象类型是什么,还是能对它进行操作,而它也会根据对象(或类)类型的不同而表现出不同的

多态和方法

>>> 'abc'.count('a')
1
>>> [1,2,'a'].count('a')
1

对于变量x来说,不需要知道它是字符串还是列表,就可以调用它的count方法,不用管它是什么类型
即对于x,它的count方法带有一个字符串作为参数,并且返回整数值。

多态的多种形式

很多内建运算符和函数都有多态的性质


>>> 1+2
3
>>> 'Fish'+'license'
'Fishlicense'

很多函数和运算符都是多态的——自己写的很多程序可能都是。唯一能够毁掉多态的就是使用函数显示地检查类型。多态真正重要的是如何让对象按照你所希望的方式工作,而不管它是否是正确的类型(或者类)。

一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值