• Python day 9(2) 参数检查以及多重继承


    一:参数检查(用@property装饰器把方法变成属性调用是一种方法)

    
    
     1 class Student(object):
     2 
     3     @property  #相当于get_score函数/getter
     4     def score(self):
     5         return self._score
     6 
     7     @score.setter  #相当于set_score函数/setter
     8     def score(self, value):
     9         if not isinstance(value, int):
    10             raise ValueError('score must be an integer!')
    11         if value < 0 or value > 100:
    12             raise ValueError('score must between 0 ~ 100!')
    13         self._score = value
    
    
    

    把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值
    1 s = Student()
    2 >>> s.score = 60 # OK,实际转化为s.set_score(60)
    3 >>> s.score # OK,实际转化为s.get_score()
    4 60
    5 
    6 >>> s.score = 9999
    7 Traceback (most recent call last):
    8   ...
    9 ValueError: score must between 0 ~ 100!


    还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性
    
    
     1 class Student(object):
     2 
     3     @property
     4     def birth(self):
     5         return self._birth
     6 
     7     @birth.setter
     8     def birth(self, value):
     9         self._birth = value
    10 
    11     @property
    12     def age(self):
    13         return 2015 - self._birth
    
    
    
    
    

    上面的birth是可读写属性,而age就是一个只读属性

    二:多重继承(MixIn

    1 class Dog(Mammal, Runnable):
    2     pass
    3 
    4 class Bat(Mammal, Flyable):
    5     pass
    
    

    通过多重继承,一个子类就可以同时获得多个父类的所有功能。

     

    
    
    
    
    1 class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
    2     pass
    
    
    

    MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。

    
    

     由于Python允许使用多重继承,因此,MixIn就是一种常见的设计。

    
    

     只允许单一继承的语言(如Java)不能使用MixIn的设计。

    多重继承深入讲解:

    https://kevinguo.me/2018/01/19/python-topological-sorting/

     
     
  • 相关阅读:
    Git命令与使用
    Android与WebView的JS交互
    Android 中关于硬件加速的使用和问题
    Activity-生命周期和启动模式
    Activity-恢复与保存状态或数据
    Android中Paint的一些使用心得记录
    Java中sleep,wait的区别
    C#基本类型
    LeetCode74 搜索二维矩阵
    leetcode 43 字符串相乘 java
  • 原文地址:https://www.cnblogs.com/woshihuihui/p/8266817.html
Copyright © 2020-2023  润新知