0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python类的多态和类的property属性

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-09 16:37 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

python类的多态

多态,是指在同一类型下的不同形态。

比如下面这段代码

class People:
    def speak(self):
        pass

class American(People):
    def speak(self):
        print("Hello, boys")

class Chinese(People):
    def speak(self):
        print("你好,老铁")

p1 = American()
p2 = Chinese()

American 和 Chinese 都继承了 People 类,但他们在 speak() 函数下,却有不同的形态表现。American 说英文,Chinese 说汉语。

倘若现在有一个 do_speak 函数

def do_speak(people):
    people.speak()

do_speak(p1)
do_speak(p2)

那么无论传入的 American 实例还是 Chinese 实例,只要他有实现 speak 方法都可以。

这就是 Python 中非常有名鸭子类型:一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

套入刚刚的代码实例中,就是一个对象,只要有 speak 方法,那么他就是一个 do_speak 方法所需要的 people 对象。

类的 property 属性

在之前的学习中,对象的属性,我们都是通过把变量值赋值给对象本身来实现的。

>>> class Student:pass
...
>>>
>>> s = Student()
>>> s.name = "王炳明"
>>> s.age = 27

直接赋值会存在一个问题,就是无法对属性值进行合法性较验,比如我给 age 赋值的是负数,在业务上这种数据是不合法的。但上面那种写法是无法检查出来的。

>>> s.age = -27
>>> s.age
-27

为了实现属性的合法性校验,Python 引入的 property 属性。

请看下面这段代码

class Student:
    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if 0 <= value <= 150:
            self._age = value
        else:
            raise ValueError("Valid value must be in [0, 150]")

此时再对 age 属性进行赋值就会对 value 的值进行合法性检查,小于 0 或者 大于 150 的都是不合法数据。

>>> s = Student()
>>> s.age = -27
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 10, in age
ValueError: Valid value must be in [0, 150]

由此我们知道了 property ,其实是 Python 中一个内置的装饰器,它可以在新式类中把一个函数 改造 成属性。

当你读取属性值时,会进入被 property 装饰的函数。

当你对属性进行赋值时,会进入被 @xx.setter 装饰的函数。

两个装饰器,一定是 @property 在前面,而 @xx.setter 在后

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 面向对象
    +关注

    关注

    0

    文章

    64

    浏览量

    10275
  • python
    +关注

    关注

    58

    文章

    4883

    浏览量

    90294
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    5水晶头和6水晶头可以混用不

    5水晶头和6水晶头不建议混用,原因如下: 1. 物理结构差异导致兼容性问题 铜芯直径不同: 5水晶头适配的网线铜芯直径为0.45-0.51毫米,而6水晶头需适配0.52-0.5
    的头像 发表于 02-10 10:08 5051次阅读

    如何分辨五网线

    分辨五与六网线的方法如下: 外皮标识 五网线外皮标注“CAT5”,六网线标注“CAT6”。这是最直观的区分方式,标识直接表明网线的类别。 传输性能 五
    的头像 发表于 01-28 10:21 1972次阅读

    6水晶头能向下兼容5网线吗?

    6水晶头能向下兼容5网线,但需注意兼容性细节及潜在影响,具体分析如下: 一、物理兼容性:可插入,但需满足条件 线径匹配 6水晶头进线孔径较大(通常≥1.08mm),以适应6网线
    的头像 发表于 01-04 11:23 4578次阅读

    用5水晶头接6网线会有什么后果?

    使用5水晶头连接6网线,可能导致接触不良、信号干扰、传输速率受限、网络稳定性下降及设备损坏风险增加,具体后果及分析如下: 1. 物理结构不匹配导致接触问题 线径差异:6网线铜芯直径通常为
    的头像 发表于 12-31 10:10 2.2w次阅读

    5水晶头和6水晶头在外观上有什么区别?

    5水晶头和6水晶头在外观上的区别主要体现在结构设计、尺寸细节、颜色标识和材质工艺等方面,这些差异源于它们对不同网络性能需求的适配。以下是具体对比: 1. 结构设计差异 5水晶头: 内部结构
    的头像 发表于 12-30 10:32 2351次阅读
    5<b class='flag-5'>类</b>水晶头和6<b class='flag-5'>类</b>水晶头在外观上有什么区别?

    图解码说-六大UML图关系(依赖,继承,实现,关联,聚合,组合)

    基础 UML图的基本单元,如下所示 + ----------------+ | Animal | // 名+ ----------------+ | - name : String | //
    的头像 发表于 11-05 09:03 892次阅读
    图解码说-六大UML<b class='flag-5'>类</b>图关系(依赖,继承,实现,关联,聚合,组合)

    跳线VS超五/超六——如何选择“网络血管”?

    在布线工程中,选对跳线类型直接影响网络性能与成本。六跳线虽非“全能选手”,但在特定场景下性价比突出。 一、六跳线VS超五:千兆网络的“分水岭” 案例:某小区升级千兆光纤到户,若使用超五
    的头像 发表于 10-21 10:24 1501次阅读
    六<b class='flag-5'>类</b>跳线VS超五<b class='flag-5'>类</b>/超六<b class='flag-5'>类</b>——如何选择“网络血管”?

    超六网线水晶头和六水晶头通用吗

    超六网线水晶头与六水晶头在物理结构上不完全通用,但通过兼容设计或特殊处理可实现互连,不过可能影响性能。 以下是具体分析: 一、超六与六水晶头的核心区别 1. 结构差异 六
    的头像 发表于 10-13 10:32 8639次阅读
    超六<b class='flag-5'>类</b>网线水晶头和六<b class='flag-5'>类</b>水晶头通用吗

    超六跳线是否可以接到六配线架

    超六跳线可以接到六配线架,原因如下: 物理接口兼容性:超六跳线与六配线架均采用标准RJ45接口,物理形态完全一致,可直接插拔连接。这种设计确保了不同类别网线在物理层面的通用性,
    的头像 发表于 09-18 09:52 1236次阅读

    网线接口能插六网线吗

    网线接口(RJ45)可以插六网线,但实际使用效果需结合具体场景和设备综合判断。以下是详细分析: 一、物理兼容性:接口通用,但需注意细节 RJ45接口标准统一 五(Cat5)、超五
    的头像 发表于 09-08 10:32 1.7w次阅读

    网线面板分五

    网线面板确实分五和六,这种分类主要基于其适配的网线类型及传输性能,以下是具体说明: 一、分类依据 适配网线类型 五面板:专为五网线(CAT5)设计,适用于百兆以太网(100Mb
    的头像 发表于 08-08 09:46 5050次阅读

    网线能用六水晶头吗

    网线可以使用六水晶头,但需注意兼容性和实际效果,且通常不建议长期或关键场景下这样搭配。 以下是详细分析: 一、五网线与六水晶头的兼容性 物理结构兼容性 线径与排列:五
    的头像 发表于 08-06 10:29 1w次阅读
    五<b class='flag-5'>类</b>网线能用六<b class='flag-5'>类</b>水晶头吗

    超速网线属于超六网线吗

    超速网线并非标准术语,若其指代支持10Gbps传输的六改进型网线,则可归类为超六网线。以下为具体分析: 在网线分类标准中,并不存在“六超速网线”这一官方命名。若该名称指代通过
    的头像 发表于 08-05 10:00 1386次阅读

    网线有几层护套

    网线有双层护套。以室外双护套六非屏蔽网线为例,其外护套采用聚氯乙烯(PVC)加聚乙烯(PE)双层护套,厚度达0.55mm。这种双层护套设计可增强线缆的耐磨性、抗老化性和环境适应性,尤其适用于
    的头像 发表于 05-19 10:21 2418次阅读

    6E是不是超六网线

    6E并不是超六网线,而是增强型六网线,而超六网线通常被称为6A。 1. 6E与超六网线(6A)的区别 6E网线: 属于增强型六网线
    的头像 发表于 04-22 10:27 1w次阅读