#!/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()
python 64式: 第7式、抽象类与抽象方法
猜你喜欢
转载自blog.csdn.net/qingyuanluofeng/article/details/83119012
今日推荐
周排行