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

    浏览量

    10218
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

    网线接口能插六网线吗

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

    网线面板分五

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

    网线能用六水晶头吗

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

    网线超6与6的区别

    网线超6(Cat 6a)与6(Cat 6)的主要区别如下: 1. 传输性能 6网线(Cat 6): 支持最高250 MHz的带宽。 适用于千兆以太网(1 Gbps),最大传输距离100米。 超
    的头像 发表于 04-16 10:04 1.2w次阅读

    买水晶头如何匹配超5 67

    购买与超5、6、7网线匹配的水晶头时,需遵循以下原则,以确保传输性能、稳定性和兼容性: 一、匹配原则 超5网线 推荐搭配:超5水晶
    的头像 发表于 03-26 10:05 4921次阅读

    网络线五线和六线有什么区别

    网络线中的五线和六线在多个方面存在显著差异,以下是对这两网络线的详细比较: 一、内部结构 五线:五线的内部结构相对简单,通常没有特
    的头像 发表于 02-26 10:28 2971次阅读

    DLP4500 sdk中pattern和Image如何使用?

    启动投影需要pattern类型的数据。我有需要投影的图片读取成Image,如何用这个Image创建pattern呢?pattern类似乎只有默认构造函数,我怎么把Image数据装载上pattern呢?有提供这样的函数吗?
    发表于 02-21 12:59

    网线6和7的区别是什么

    网线6和7的区别主要体现在以下几个方面: 一、传输性能 传输速率: 六网线(CAT6)支持高达1Gbps的传输速率,适用于千兆以太网。 七网线(CAT7)则支持高达10Gbps
    的头像 发表于 02-10 10:20 8660次阅读

    网线怎么分辨56

    要分辨网线是5还是6,可以从以下几个方面进行观察和分析: 一、外观标识 外皮印刷:正规的网线外皮上通常会有明确的标识。5网线的标识一般为“CAT5”或“Cat 5e”(超5),
    的头像 发表于 02-08 10:28 7276次阅读

    6水晶头和5区别

    水晶头和五水晶头在多个方面存在显著的区别,以下是对这两者的详细比较: 一、结构与设计 网线排列:五水晶头的网线通常呈一字形排列,而六水晶头的网线则是分成上下两排且相互错开排列
    的头像 发表于 01-17 10:43 6013次阅读

    水晶头和五水晶头的兼容性问题

    水晶头和五水晶头在兼容性方面存在一些差异,具体体现在以下几个方面: 一、物理尺寸与结构 六水晶头:为了适应更粗的六网线(铜芯直径通常在0.52至0.58毫米之间),六
    的头像 发表于 12-31 09:49 3852次阅读

    超五网线与五网线区别

    随着网络技术的发展,数据传输速度和网络稳定性的要求越来越高。在众多网络连接介质中,网线因其稳定性和成本效益而广泛使用。五网线(Cat 5)和超五网线(Cat 5e)是两种常见的网线类型,它们在
    的头像 发表于 12-28 11:37 9196次阅读

    网线和六网线的水晶头是否通用?

    关于五网线和六网线的水晶头是否通用的问题,存在不同的观点: 一、不可通用的观点 一种观点认为,五网线和六网线的水晶头不可通用。这主要是因为五
    的头像 发表于 12-20 09:56 1.5w次阅读