今日内容:
3.面向对象
面向对象:
面向过程:1优点:将复杂的事情简单化,流程化
2:缺点:扩展性低,可维护性差
3,应用场景:对扩展性要求较低的程序
系统内核,shell脚本,计算器啥的
面向对象:是一种编程思想
关注的点是对象,把你的思维角度从具体操作者变成了一个指挥者
案例:把大象装进冰箱
1,打开冰箱
2,塞入大象
3,关闭冰箱
这就是一个典型的面向过程思想
换成面向对象
找一个具备装大象这个技能的对象,然后命令它装大象
(这时候整个程序就会发生巨大变化,需要什么就调取具体对象 ,扩展性更强)
面向对象优点:不需要在关注具体的实现细节 可以更好的关注业务逻辑
扩展性提高了,维护性高 ,复用性高
缺点:对比面向过程而言,程序需要想设计,结构更复杂 ,程序复杂度提高了
无法准确预知执行结果
面向对象应用场景:
对于扩展性要求较高的应用程序。 qq 微信,等
对象:具备某种特征与行为的集合体并且是具体存在的就称之为对象 例子:如来佛祖,马克思
类:某些具备相同特征和相同行为的集合体,是一种抽象概念 例子:人, 动物,狗 。
在程序中先定义类型,通过类型在查找对象=====即必须先有类,才能产生对象,因为你要提前告诉计算机这个对象是什么样的,让后做什么事
用法:
#关键字:class
# 类名称命名法: 为大驼峰,所有单词首字母全大写。 小驼峰:第一个单词首字母小写
class Student:
#如何描述属性(变量) 属性
shool = "olbBOY"
#描述技能使用的函数 方法
def say_hi(self):
print("三号小学生")
# 创建对象
print("txst...")
pass
# stu1 = Student() #通过字符串来完成任务
# stu1.say_hi()
print(Student.say_hi)
Student.say_hi()
print(Student.shool)
class Person:
country = "china" #属性
def eat(self): #描述技能使用的函数 方法
print("在睡觉。。。")
p1 = Person()
print(p1)
print(Person) #<class '__main__.Person'>
print(p1.country) #china
p1.eat() #在睡觉。。。
#为对象增加了属性
p1.name = "张三"
print(p1.name)
#print(Person.name) #报错,
# 对象里的名称空间是独立的,类有类自己的名称空间,两个彼此独立,但是对象可以访问类的名称空间
#对象优先查找自己的,自己没有在去查找类里的
p1.country = "USA" #给p1对象优先添加了country
#在访问时优先访问自己名称空间的内容,如果找不到 会自动找类里的属性
print(p1.country) # USA
print(Person.country) # china
#每个对象都会存储自己所在累的地址,可以使用.__class__来访问
print(p1.__class__)
print(type(p1))
#查看名称空间中的属性
print(p1.__dict__) #{'name': '张三', 'country': 'USA'}
print(Person.__dict__)