python 64式: 第7式、抽象類與抽象方法
阿新 • • 發佈:2018-11-08
#!/usr/bin/env python # -*- coding: utf-8 -*- import abc from datetime import datetime import six ''' 關鍵: 1 抽象類與抽象方法 在類前面加上: @six.add_metaclass(abc.ABCMeta) class People(object) 裡面必須至少包含一個抽象方法,即 @abc.abstractmethod def getAge(self): """""" 抽象方法在抽象類中不能實現,必須被繼承抽象類的子類實現 2 抽象類中可以包含已經實現的方法 這個實現的方法可以被子類繼承 3 抽象類中可以有抽象屬性 形如: @abc.abstractproperty def identity(self): """Get identitu of people""" 子類如果要實現該抽象屬性,需要實現,並且在子類實現時,在該屬性前面加上 @property def identity(self): 4 python是動態語言 動態語言是體現在: 1)python可以修改變數的型別, 例如: a = 100 def test(): print "test" a = test a() a剛開始是整數型別,後來變成了函式型別 這在靜態語言(例如C++)是不可能的。 2)可以向類的物件新增屬性,可以向類新增屬性或方法 class Persion(object): def __init__(self, name): slef.name = name person = Person('chen') person.age = 28 參考: https://blog.csdn.net/gaishi_hero/article/details/81838829 5 C++是靜態語言有多型,python是動態語言,那麼python是否具有多型? 具有。 ''' @six.add_metaclass(abc.ABCMeta) class People(object): def __init__(self, name, birthDate): self.name = name self.birthDate = birthDate self.age = None self._identity = None @abc.abstractmethod def getAge(self): """Compute age of people""" @abc.abstractproperty def identity(self): """Get identitu of people""" def getName(self): return self.name class Student(People): def __init__(self, name, birthDate): super(Student, self).__init__(name, birthDate) def getAge(self): now = datetime.now() result = now - self.birthDate self.age = result.days / 365 return self.age @property def identity(self): if not self._identity: self._identity = 'student' return self._identity def process(): student = Student('chen', datetime(1990, 3, 24)) age = student.getAge() identity = student.identity name = student.name info = "name: {name}, age: {age}, identity: {identity}".format( name=name, age=age, identity=identity) print info if __name__ == "__main__": process()