派生类中扩展属性

对于在父类中存在的属性,如果要在其派生类中继续扩展属性

  可以这样实现

 1 class Valley:
 2     def __init__(self):
 3         self._name = None
 4 
 5     @property
 6     def name(self):
 7         return self._name
 8 
 9     @name.setter
10     def name(self, val):
11         try:
12             assert val.startswith("g")
13         except  AssertionError:
14             self._name = "g" + val
15         else:
16             self._name = val
17 
18 
19 class SubValley(Valley):
20     @Valley.name.setter
21     def name(self, val):
22         if len(val) >= 3:
23             print(">>长度检查通过")
24         else:
25             raise Exception("{}长度应大于等于3".format(val))
26         super(SubValley, SubValley).name.__set__(self, val)
27 
28 
29 if __name__ == '__main__':
30     obj = SubValley()
31     obj.name = 'lee'
32     print(obj._name)

output: 

  >>长度检查通过
  glee

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:派生类中扩展属性 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • 编程思想

    三大编程思想:   POP:面向过程编程(Procedure Oriented Programming)   OOP:面向对象编程(Object Oriented Programming)   AOP:面向切面编程(Aspect Oriented Programming) 以下大部分内容引用腾讯云一位笔者,我也是进一步了解纯记录之目的。 POP ​   面向…

    Python开发 2023年4月2日
    00
  • 面向对象之多态

    鸭子类型   我们都知道面向对象的语言有三大特性:封装、继承和多态,在这里我浅谈一下python的多态 1 class PageOne: 2 def status(self): 3 return “按期申报页” 4 5 6 class PageTwo: 7 def status(self): 8 return “其他申报页” 9 10 11 class Pa…

    Python开发 2023年4月2日
    00
  • 代码坏味道(一)

    1、神秘命名   模块、类、函数、变量等的命名是编程中最难的两件事之一,正因为如此,改名可能是最常用的重构手法   对应的重构手法有:改变函数声明、变量改名、字段改名 2、重复代码   顾名思义,就是在多处看到相同的代码结构   对应的重构手法有:移动语句、提炼函数 3、过长的函数   确保函数内代码处在同一层抽象级,无须担心进程内的函数开销,提倡小函数 4…

    Python开发 2023年3月31日
    00
  • 浅用描述符

      可以理解为property方法的一种进阶,都可以用来创建一种新形式的实例属性,即在实例属性值的获取和设定上,增加额外的处理事务,such as:类型检查、验证   重写三个属性访问方法,其中__delete__方法是否重写取决需求   在类层次上引用描述符,即该类遵从描述符协议 1 class Check: 2 def __init__(self, na…

    Python开发 2023年4月2日
    00
  • 工匠回忆(二)

    接上文 4、条件分支控制流   避免分支嵌套,异常放在代码片段最前面   4.1、归约函数   4.2、条件表达式的封装避免过长而导致可读性下降   4.3、德摩根定律   4.4、and、or优先级   4.5、or短路效应   4.6、消失的分支     4.6.1、二分查找算法     4.6.2、字典算法   5、异常错误处理   无需多言   6、…

    python 2023年5月4日
    00
  • 工匠回忆(三)

    接上文 7、函数   7.1、长度   7.2、圈复杂度   7.3、函数内代码确保处在同一抽象层内,主流程清晰,不存在穿插的分支   7.4、有状态的函数     7.4.1、全局变量     7.4.2、闭包函数     7.4.3、类     比较偏向于后两者   8、装饰器   装饰器和装饰器模式是两个完全不同的概念   1、三方模块wrapt的引入…

    python 2023年5月6日
    00
  • pyqt入门

      第一次接触pyqt是在20年刚毕业的时候,时隔两年,恰逢闲暇,正好回过头来对这个模块的知识进行一个整理,不会做系统化的整理,我打算可能会围绕之前做过的小工具对其涉及到的控件、信号和槽等知识进行简单的回忆。后面工作如果再涉及或者想到其他的,会再回来更新完善。   pyqt5:同前面整理的kivy一样,同属于GUI开发框架的范畴,不同的是,pyqt用于桌面应…

    2023年4月2日
    00
  • 钩子函数

    控制子类的的创建 1、元类   这种方式可能是最常见的也是我们最先知晓的,当然这种方式可能需要我们对元类有比较深入的了解,所以引入了下面的这种方式 2、钩子函数   __init__subclass__,字面意思,父类实现了该双下方法,其后凡是继承他的派生类,都会触发此方法,进行派生类的初始化,实现派生类属性的增加及修改 1 class Meta: 2 de…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部