今天学习了面向对象基础。
概念:什么是面向对象?
面向对象也是一种编程思想,其核心就是对象
对象指的是现实生活中实实在在存在的物体,并且其具备独特的特征与行为,反过来可以理解为 特征与行为的结合体。生活中到处都是对象,如何判断一个事物是不是对象,就看你能不能通过特征和行为准确的找到它。
举例:张三丰的女朋友
错误:女朋友
面向对象的优点是什么?
==提高扩展性==
面向对象编程中,不需要再关心一个任务具体的实现步骤,只要找到一个具备这个功能的对象,并命令它执行功能即可,不难看出我们从一个操作者转变为一个指挥者,这之间有着天壤之别~
就好想如来佛祖,需要有人完成取经这个任务,不需要他亲自参与每一个步骤的执行,只要找到唐僧师徒,让他们去完成即可,更重要的是,唐僧师徒每一个都是单独的个体,某个人的属性或行为发生变化不会影响到其他人,例如观音给了猴子三根猴毛,增加了他的打怪能力。
面向对象中程序员就好想是上帝,需要什么就创造什么,要做事情就找相应的对象来做
体现到程序中,就是提高了程序的扩展性,这也是我们之所以使用面向对象这种编程方式的原因。
面向对象的缺点:
程序复杂度提高,如果没有搞清楚使用场景,很容易出现过度设计问题
要知道 扩展性并不是评判软件质量的唯一指标
什么是类:
类是一些具备相同特征和技能的事物的抽象概念,不实际存在
举例:人类,植物类,动物类
但是注意站在不同的角度会发现不同的类
类和对象的关系
在现实生活中,随着人类认知能力的发展,需要对事物进行分类
==是先有对象才有了类==
而在编程的世界中,一定是先有类型才有对象,因为对象是行为和特征的集合体,如果不清楚有什么特征有什么行为,就不可能创造出对象,所以
==在程序中是先有类再有对象==
实践:
Python中类的操作
1.定义类的语法
class类名:
注意:类名使用驼峰命名法
class oldboyStudent: pass
2.定义类的属性
类是用来描述对象的特征和行为
那么类中应该包括两种内容
1.变量属性 描述对象的特征
name = '张无极'
2.函数属性 描述对象的技能(行为)
def say_hi(self): pass
3.定义类是发生了什么
该文件中被导入或被允许时,立即执行类中的代码,讲产生的名字存放在类的名称空间中
print(oldboyStudent.__dict__)
4.访问类中的属性
可以通过名称空间访问
print(oldboyStudent.__dict__['name']) print(oldboyStudent.__dict__['say_hi'])
更推荐通过点来访问类中的变量和函数
print(oldboyStudent.name) print(lodboyStudent.say_hi)
调用类中的函数需要按照声明传入相应的参数
self此时就是一个普通的参数名称
print(oldboyStudent.say_hi('123456'))
5.删除类属性
del oldboyStudent.name
python中对象的操作
1.创建对象 在类名后面添加括号
stu = oldboyStudent()
2.访问对象的属性 通过点语法可以访问属性
print(stu.name)
3.为对象指定属性的值 也可以增加属性
stu.name = '周芷若' stu.age = 20
4.删除属性
del stu.name
__init__函数
__init__函数称为初始化方法 会在创建对象后自动执行,我们可以使用它来定制对象的特征,我们不应该手动调用它
def __init__(self,name,age): self.name = name self.age = age
self参数表示刚刚创建的这个对象本身
总结:init函数是在创建对象后立即执行,会自动传入对象本身
对象,类的名称空间与属性的查找顺序
1.创建对象时发生了什么
创建空对象
执行init函数并传入对象本身,和额外的参数
2.对象中属性的查找顺序
创建对象时会创建对象自己的名称空间
查找顺序
对象自身的名称空间->类的名称空间
我们应该将所有对象共同的部分放在类中,不同的部分放到对象中
绑定方法
举例:
class Person:
country = "China"
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def sleep(self):
print('sleeping')
def eat(self):
print('eating')
p1 = Person('矮根',68,'female')
p2 = Person('高根',18,'female')
p1.sleep()
p2,sleep()
Person,sleep(10)
类调用类中函数与对象调用的区别
对于类而言 sleep就是一个普通函数
对对象而言 sleep是一个绑定方法
绑定方法是什么?
是对象与类中的某个函数的绑定关系 就像生活中 我们都会吃饭 我吃饭你不会饱
那么吃饭就是我自己的绑定方法
为什么要把函数进行绑定?
因为对象的行为 通常都需要访问这个对象的数据 或是修改这个对象的数据
如果没有对象 直接调用函数是没有意义的 在函数中访问不到对象的数据
所以将对象和函数进行绑定
特殊之处
在使用绑定方法时 不需要关心self参数 会自动将这个对象传进来
对象调用绑定方法时 最后执行的还是类中的那个函数
对于类而言
一切皆对象