面向对象编程
面向对象编程是一种程序设计思想
面向对象编程和面向过程编码的区别
面向过程编程
面向过程编程:核心是过程二字,过程指的是解决问题的步骤,即先干什么后干什么。面向过程的设计就好比流水线,是一种机械式的思维方式。
优点:复杂的问题流程化,进而简单化
缺点:可扩展性差,不便修改
面向对象编程
面向对象编程:核心是对象二字,对象是属性和方法的结合体。面向对象的设计就好比上帝创造世界,存在的都是对象,不存在的也可以造出来。面向对象更加注重对现实世界的模拟,这与面向过程的机械式思维方式形成鲜明对比。
优点:可扩展性强
缺点:编写的复杂远远高于面向过程,不了解面向对象就设计程序,很容易出现设计过度的问题,很难预测到最终结果
面向对象的程序设计并不是全部,对于一个软件质量来说,面向对象的程序设计只是用来解决扩展性的。
类和对象
类和对象是面向对象最重要的概念
类:具有一系列相同属性和方法的对象的结合体,类就是类型
对象:对象是属性和方法的结合体
在现实世界中:先有对象再有类
在python中:先有类再有对象,调用类来产生对象
类
在python中,定义类是通过class关键字的,class 类名
# 定义类尽量使用驼峰体
class Student():
pass
获取属性和方式是通过 . 来获取的
- 类获取属性和方法
- 类.__dict__
- 类来调用属性和方法
- 通过dict取(复杂,不适用)
- 类名.属性/函数
对象
调用类就可以产生对象,调用类的过程,又叫做类的实例化,实例化产生的结果称为类的对象/实例。具体的方式是类名加括号就可以生成对象
class Student():
pass
stu1 = Student()
获取属性和方式是通过 . 来获取的
-
对象获取属性和方法
- 对象.__dict__
-
对象来调用属性和方法
- 对象.属性/方法(对象调用方法,第一个参数不用传值)
给对象赋值
对象可以自己添加属性和方法,但是当对象本身没有属性和方法,对象可以去调用类里面的属性和方法。
我们有两种方式可以给对象添加属性和方法。
方式一:直接用对象点出我们需要的添加的属性或方法(方法要先写好函数),然后进行赋值
class Student:
school = 'oldboy'
def study(self):
print('学习...')
stu1 = Student()
stu1.name = 'xiaowu'
print(stu1.name)
# xiaowu
方式二:通过__init__
方法
class Student:
school = 'oldboy'
def __init__(self, name):
self.name = name
def study(self):
print('学习...')
stu1 = Student('xiaowu')
print(stu1.name)
# xiaowu
在类中定义__init__
方法,方法内写一些参数
当我们在实例化产生对象的时候,括号内传的值会内传到__init__
方法中,完成对象的初始化
属性的查找顺序
先从对象自身找--->再到类中找--->报错
绑定方法
定义在函数内部的方法:
如果类来调用,就是一个普通的函数,有几个参数就需要传入几个参数
如果对象来调用,就叫做对象的绑定方法,第一个参数(self)不需要传,会自动传递对象本身
一切皆对象
在python中,一切都是对象,如字典、列表、字符串等等
类就是类型,类实例化会产生对象,对象调用对象的绑定方法(内置方法),可以修改对象自己