Python中面向对象的基本理论(一)
基本理论:
什么是对象:
万物皆对象
对象是具体物体:
拥有属性
拥有行为
把很多零散的东西,封装成一个整体
举例:小王:
属性:身高、体重……
行为:走路、吃饭、放羊……
Python中的体现:
Python是一门特别彻底的面向对象编程(OOP)的语言
面向过程&面向对象
两者都是一种解决问题的思路
面向过程:在解决问题的过程中,关注的是解决问题的每一个过程(步骤)
面向对象:在解决问题的过程中,关注的是解决问题的对象
举个例子:
做好饭之后洗碗
对比:
面向对象本身是面向过程的封装
面向过程编程最重要的是什么? 分解步骤的能力
面向对象编程最重要的是什么? 把哪些功能划分到哪个对象
如何从面向过程编程的思想,转变到面向对象的编程思想
什么是类:
某一个具体对象特征的抽象
举例:
类的作用:
根据抽象的类,产生具体的对象
例如:
面向对象在Python中的实践
类的组成:
名称、属性、方法。
属性是静态的,方法是动态的
一定要注意:以上属性和方法,都是抽象的概念
在产生对象之后,对象才拥有具体的属性值,和方法实现。
对象和类的关系:
对象 抽象 类 实例化 对象
如何定义一个类:
#新式类
#经典类
#定义一个经典类,类的定义也会占用内存
class Money:
pass
print(Money)
#根据这个类,实例化一个对象
one = Money()
print(one)
类的属性相关
属性和变量的区别和判断依据?
区别:
概念:
变量是"可以改变的全值"
属性是"居于某个对象的特性"
访问权限:
变量:根据不同的位置,存在不同的访问权限(全局变量、局部变量)
属性:只能通过对象来进行访问。(必须先找到对象,对象也是通过变量名来引用;而既然是变量,也有对应的访问权限)
判断依据:
是否存在宿主
对象属性
怎样让一个对象拥有一些属性?(增)
- 直接通过对象,动态添加 (语法:对象.属性 = 值)
- 通过类的初始化方法(构造方法) _init_方法
print(one.__dict__) 打印这个对象的所有属性
怎样访问一个对象的属性? (查)
删除: del one (删除一整个对象) del one.age (删除这个属性)
类属性
万物皆对象,类也是一个对象
给类增加、修改属性
1、Money.num = 18
2、class Money:
age = 1
num = 18
注意:不能通过类实例化的对象增加或者修改类的属性
限制类中实例化对象属性的添加:
在类的定义中,添加 __slots__ = ["age"]
类的方法相关
方法的概念
描述一个目标的行为动作
和函数非常类似:
都封装了一系列的行为动作
被调用之后,都可以执行一系列的行为动作
最主要的区别就是:调用方式
方法的划分
实例方法:默认第一个参数需要接收到一个实例
三种不同的方法,都是存储在类里面,而不是实例化的对象里面。不管是自己传递,还是解释器帮我们处理;最终要保证不同类型的方法第一个参数接收到的数据,是他们想要的类型
一般在实例方法,至少得有一个参数,而且一般情况下我们的一个形参名称写的是self,(其实形参名称可以是任意值)写self表示往后这里会接受一个实例本身。
标准调用:使用实例调用实例方法·不用手动传,解释器会自动把调用对象本身传递过去