@[toc]
面向对象程序设计 OO
- 一种程序设计范式
- 程序由对象组成,每个对象包含对用户公开的
特定功能和隐藏的实现部分 - 对象是数据与相关行为的集合
- 不必关心对象的具体实现,只要能满足用户的
需求即可
类
- 对象的类型,用来描述对象
- 构造对象的模板
- 定义了该集合中每个对象所共有的属性和方法
- 由类构造对象的过程称之为实例化,或创建类的实例
一些重要概念
- 多态:可以对不同类型的对象执行相同的操作
- 封装:将数据和行为组合,并对外隐藏数据的实现方式
对象的状态:当下实例域的值的特定组合 - 继承:通过扩展一个类来建立另外一个类
类与类之间的关系
- 依赖
- 一个类的方法操纵另一个类的实例
- 耦合度及其最小化
- 聚合
- 类A包含类B的实例对象
- 继承
- 类A由类B扩展而来
- 如果类A扩展类B,类A不但包含从类B继承的方法,
还会拥有一些额外的功能
- UML
自定义类
创建类
class Student:
def __init__(self):
pass
- 类的文档信息可以通过
ClassName.__doc__
查看 - 类的定义要先执行才能生效
• 可以在函数中或if等中进行类定义 - 类会创建一个新的命名空间
辨析
- 类对象
• 类对象支持属性引用和实例化
• 属性引用可以是类变量,也可以是类方法 - 实例对象
• 实例对象仅能进行属性引用(数据或方法)
辨析 - 类变量
• 类变量在所有实例化的对象中是公用的
• 类变量定义在类中且在类方法之外
• 类变量通常不作为实例变量使用
• 类比于Java中的静态属性 - 实例变量
• 每个实例独有
• 第一次使用时自动生成 - 与类变量重名时仍作为实例变量
类的方法
- 对于类对象,为函数(function)
- 对于实例对象,为方法(method)
class T:
def f(self):
pass
print(type(T.f)) #function
t=T()
print(type(t.f)) #method
方法定义不一定只在类中, 也可以将一个函数
对象赋值给类中的一个局部变量
def f1(self, x, y):
return min(x, y)
class C:
f = f1
c=C()
print(c.f(2,3))
print(type(c.f)) #是method还是function?
2
<class 'method'>
初始化方法
• init()为初始化方法,在类实例化时会自动调用
• 有self参数
• 也可以有除self外的其他参数
• 只能返回None
• 较为常用
举例
class people:
id = 0
def __init__(self,name,number,email,tou):
self.name = name
self.number = number
self.email = email
self.tou = tou
def speak(self):
print('%s的电话号码是%d,电子邮箱是%s'%(self.name,self.number,self.email))
def update(self,shuxing):
self.shuxing = shuxing
def show(self):
print(people.__dict__)
test = people('jim',15378836913,'19377056@buaa.edu.cn','')
test.speak()
test.show()
test.update('170cm')
test.show()
jim的电话号码是15378836913,电子邮箱是19377056@buaa.edu.cn
{'__module__': '__main__', 'id': 0, '__init__': <function people.__init__ at 0x000002C5AFA6DEE0>, 'speak': <function people.speak at 0x000002C5AFA6DF70>, 'update': <function people.update at 0x000002C5AFA96040>, 'show': <function people.show at 0x000002C5AFA960D0>, '__dict__': <attribute '__dict__' of 'people' objects>, '__weakref__': <attribute '__weakref__' of 'people' objects>, '__doc__': None}
{'__module__': '__main__', 'id': 0, '__init__': <function people.__init__ at 0x000002C5AFA6DEE0>, 'speak': <function people.speak at 0x000002C5AFA6DF70>, 'update': <function people.update at 0x000002C5AFA96040>, 'show': <function people.show at 0x000002C5AFA960D0>, '__dict__': <attribute '__dict__' of 'people' objects>, '__weakref__': <attribute '__weakref__' of 'people' objects>, '__doc__': None}










网友评论