面向对象
在面向对象没有出现之前,只能通过这种方式来解决问题(面向过程)
输出结果:
面向过程描述这一个人的信息和行为很容易,但是代码肯定是要处理很多人的,这个时候该怎么办?
如果使用相同的变量名,则肯定会冲突,但是如果使用不同的变量名。
则会变得非常麻烦, 同时别人如何知道关于人已经定义哪些东西了呢?
---------------------------------------------------------------------------------------------------------------------------------
借鉴函数的封装思维,再次对函数和变量进行封装,来提高代码的复用性
上述两种方法输出结果:
通过这样的封装,把和人相关的变量、函数等放在了一起。
只要找到这个部分代码,就能知道关于人已经定义了哪些变量和函数
为了便于区分,把用关键字 class 定义的代码块称为 类
在类里面的变量称为 类的属性
在类里面的函数称为 类的方法
一句话概括:(变量就是属性,函数即是方法)
---------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------
面向对象:
用面向对象的思维去解决问题。
将某一类事物相关的属性和方法封装在一起,用来表示这类事物。
self是实例自己
__init__ 是初始化函数,在实例化时会自动的调用
实例通过点( . )操作符来调用属性或方法
---------------------------------------------------------------------------------------------------------------------------------
面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想
面向对象就是将编程当成是一个事物。
对于外界来说,事物是直接使用的,不用去管内部的情况,而编程就是设置事物能够做什么事。
类和对象
图纸---->洗衣机(按照图纸加工)---->洗衣服(洗衣机的功能)
类和对象的关系:用类去创建一个对象
类是一系列具有相同特征和行为的事物的统称,是一个抽象的概念,不是真实存在的事物
特征即是属性,行为即是方法:
解释:特征就是属性 属性就是变量 行为就是方法 方法就是函数
类就好比制造洗衣机时用到的图纸,也就是说类就是用来创建对象
对象是类创建出来的真实存在的事物。
例如:洗衣机
注意:开发中,先有类,再有对象
定义类
语法
class 类名():
代码
....
例子如下:
输出结果:
注意:类名要满足标识符命名规则,同时遵守大驼峰法的命名习惯体验
# 需求:洗衣机 功能:能洗衣服
# 1.定义洗衣机类
class Washer():
# 方法 self:对象
def wash(self):
print("能洗衣服")
# 2.创建对象
# 对象名 = 类名()
haier = Washer()
# 3.验证成果
# 3.1打印haier对象
print(haier)
# 3.2 使用wash功能 ---- 实例方法/对象方法 --- 对象名.wash()
haier.wash()
---------------------------------------------------------------------------------------------------------------------------------
创建对象—对象又名实例
语法:
对象名 = 类名()
体验
# 需求:洗衣机 功能:能洗衣服
# 1.定义洗衣机类
class Washer():
# 方法 self:对象
def wash(self):
print("能洗衣服")
# 2.创建对象
# 对象名 = 类名()
haier = Washer()
类里面的self
指的是调用该函数的对象
# 1.定义类
class Washer():
# 方法 self:对象
def wash(self):
print("能洗衣服")
print(self)
# 2.创建对象
haier = Washer()
print(haier)
haier.wash()
结论:
由于打印对象和打印self得到的内存地址相同,所以self指的是调用该函数的对象
一个类可以创建多个对象
# 1.定义类
class Washer():
# 方法 self:对象
def wash(self):
print("能洗衣服")
print(self)
# 2.创建对象
haier = Washer()
print(haier)
haier.wash()
print("======"*20)
haier1 = Washer()
print(haier1)
haier1.wash()
输出结果:
添加和获取对象属性
属性即是特征,比如:洗衣机的宽度,高度,重量…
对象属性既可以在类外面添加和获取,也能在类里面添加和获取
类外面添加对象属性
语法
对象名.属性名 = 值
体验
# 1.定义类
class Washer():
# 方法 self:对象
def wash(self):
print("能洗衣服")
print(self)
# 2.创建对象
haier = Washer()
# 添加属性 --- 对象名.属性名 = 值
haier.width = 500
haier.height = 800
类外面获取对象属性
语法
对象名.属性名
体验
# 获取属性 对象名.属性名
print(f'haier洗衣机的宽度是{haier.width}')
print(f'haier洗衣机的宽度是{haier.height}')
类里面获取对象属性
输出结果:
语法
self.属性名
# 1.定义类
class Washer():
# 方法 self:对象
def wash(self):
print("能洗衣服")
print(self)
def print_info(self):
print(f'haier洗衣机的宽度是{haier.width}')
print(f'haier洗衣机的宽度是{haier.height}')
# 2.创建对象
haier = Washer()
# 添加属性 --- 对象名.属性名 = 值
haier.width = 500
haier.height = 800
# 获取属性 对象名.属性名
print(f'haier洗衣机的宽度是{haier.width}')
print(f'haier洗衣机的宽度是{haier.height}')
# 调用实例方法/调用对象方法
haier.print_info()
体验魔法方法init
在Python里面,两个下划线开头 两个下划线结尾的这类方法叫做魔法方法,指的是具有特殊功能的函数
魔法init的使用
1. 调用时机:在创建对象之后,会立即调用
2.作用:
1.用来给对象添加属性,给对象属性一个初始值(构造函数)
2.代码的业务需求,每创建一个对象,都需要执行的代码可以写在__init__中
注意点:如果__init__有除了self只有的形参 那么在创建对象的时候需要给额外的形参产地实参值
类名(实参)
__init__(self)中的self参数,不需要开发者传递,Python解释器会自动把当前的对象引用传递过去。
class Dog():
def __init__(self,name):
print("我是__init__方法,我被调用了")
# 对象.属性名 = 属性值
self.name = name
def sleep(self):
print("狗狗在睡觉")
# 创建对象
dog = Dog('小黑')
print(dog.name)
# dog.sleep()
dog1 = Dog('国宝')
print(dog1.name)
输出结果:
作业:
简单
1.什么是面向对象? 答: 面向对象是一种抽象化的编程思想。
面向对象就是将编程当成是一个事物。
对于外界来说,事物是直接使用的,不用去管内部的情况,而编程就是设置事物能够做什么事。
参考答案:面向对象就是把编程看做一个事物,编程就是设置事物能够做什么。
2.类和对象的关系是什么?
答: 1.先有类,后有对象
2.类是事物的统称。
3.对象是具体的的事物。
3.设计一个桌子类,长度宽度和高度
方法2:
困难
1.定义一个账户类,可以创建账户,存款,取款,查询余额,以及销户等操作