zoukankan      html  css  js  c++  java
  • 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/

     
     
  • 相关阅读:
    Dynamics CRM
    Cordova
    《linux就该这么学》第二节课,安装红帽7,基础命令至2.3小节的笔记
    《linux就该这么学》开课,linux之路新开始
    《linux就该这么学》找到一本不错的Linux电子书,《Linux就该这么学》。
    mongodb3.4.5用http访问28017端口
    mongodb安装步骤
    linux安装docker
    centos 遇到/dev/mapper/cl-root 100% 解决方法
    本机ping不通虚拟机,但虚拟机可以ping通本机
  • 原文地址:https://www.cnblogs.com/woshihuihui/p/8266817.html
Copyright © 2011-2022 走看看