week6
面向对象和面向过程
面向对象:以数据对象为中心,将数据类型的特性及方法封装抽象为“一种类”;B类可以在A类的基础上进行“改造”,拥有A类的一些属性和方法,同时又有B类特有的属性和方法,这就是继承;一个对象实体有多种不同的实现形式,称之为多态,如果一个实体对象只能有一种实现方式,只能说它是基于对象的,而不是面向对象的。
面向过程:以函数为中心,对数据集合进行处理,没有将某一特定的数据集合的方法和操作进行抽象封装,只对过程的重复性进行拆分。
继承和封装
import datetime
class Person(object):
def __init__(self, name):
"""self指针"""
self.name = name
self.birthday = None
self.lastName = name.split(' ')[-1]
def getLastName(self):
return self.lastName
def setBirthday(self,month,day,year):
self.birthday = datetime.date(year,month,day)
def getAge(self):
def __lt__(self, other):
return self.name < other.name
return self.lastName < other.lastName
def __str__(self):
return self.name
class MITPerson(Person):
nextIdNum = 0 # next ID number to assign
def __init__(self, name):
Person.__init__(self, name) # 初始化Person
# 私有属性
self.idNum = MITPerson.nextIdNum
MITPerson.nextIdNum += 1
def getIdNum(self):
return self.idNum
# sorting MIT people uses their ID number, not name!
def __lt__(self, other):
return self.idNum < other.idNum
class UG(MITPerson):
def __init__(self, name, classYear):
MITPerson.__init__(self, name)
self.year = classYear
def getClass(self):
return self.year
class Grad(MITPerson):
pass
def isStudent(obj):
return isinstance(obj,UG) or isinstance(obj,Grad)
生成器
#用生成器生成斐波那契数列
def genFib():
fibn_1 = 1 #fib(n-1)
fibn_2 = 0 #fib(n-2)
while True:
# fib(n) = fib(n-1) + fib(n-2)
next = fibn_1 + fibn_2
yield next
fibn_2 = fibn_1
fibn_1 = next
视频错题总结
An object's attributes must be defined in the object's __init__
method.
False,在哪个方法都可以定义,只是习惯在__init__
调用