python面向对象1–类、对象、属性、魔法方法
python面向对象2–综合案例:烤地瓜、搬家具、单继承、多继承
python面向对象3-多层继承、super()、私有权限、多态、类属性实例属性、类方法和静态方法
一、理解面向对象
面向对象是一种抽象化的编程思想
洗衣服
面向过程:手洗
面向对象:机洗,洗衣机洗
二、类和对象
洗衣机是一个事物,即对象
两个重要组成部分:类和对象
用类创建对象,类实例化对象
图纸–>洗衣机–>洗衣服
类
定义:类是对一系列具有相同特征和行为的事物的统称,是一个抽象概论。
特征–属性,行为—方法
洗衣机功能–函数
图纸—类
洗衣机–对象
在开发中,先有类再有对象(先有图纸,再有洗衣机)
#定义类
class 类名():
代码
#创建对象
对象名 = 类名()
#需求:洗衣机 功能:能洗衣服
#1,定义洗衣机类
class Washer():
def wash(self): #函数--实现功能
print('能洗衣服')
#2,创建对象
haier = Washer()
#3,验证成果
#打印haier
haier = Washer()
#使用wash功能 --实例方法、对象方法 -- 对象名.wash()
haier.wash() #成功调用wash函数,输出:能洗衣服
self指调用该函数的对象,例如haier
class Washer():
def wash(self): #函数--实现功能
print('能洗衣服')
print(self) #需要先创建对象调用一下
haier = Washer()
print(haier) #打印haier与打印self输出的内容一样
haier.wash() #需要调用,才能运行到print(self)
#目标:1,一个类是否可以创建多个对象 2,多个对象都调用函数时,self是否都相同
class Washer():
def wash(self): #函数--实现功能
print('能洗衣服')
print(self)
haier1 = Washer()
haier1.wash()
haier1 = Washer()
haier1.wash() #打印出的self是不一样的
#一个类可以创建多个对象;对象不同调用函数后 的self也不同
三、添加和获取对象属性
属性即对象的特征,比如:洗衣机的宽度,高度,重量
对象属性可以在类外面 and 类里面 添加和获取
类外面添加对象属性
对象名.属性名 = 值
例如:haier1.width = 500
class Washer():
def wash(self): #函数--实现功能
print('能洗衣服')
print(self)
haier1 = Washer()
#添加属性
haier1.width = 500
haier1.height = 500
类外面获取对象属性
对象名.属性名
haier1.width
class Washer():
def wash(self): #函数--实现功能
print('能洗衣服')
print(self)
haier1 = Washer()
#添加属性
haier1.width = 500
haier1.height = 500
#获取属性
print(f'洗衣机的宽度是{haier1.width}')
类里面获取对象属性
self.属性名
class Washer():
def wash(self): #函数--实现功能
print('能洗衣服')
#获取实例属性
def print_info(self):
print(self.width)
print(f'洗衣机的高度是{self.height}')
haier1 = Washer()
#添加属性
haier1.width = 500
haier1.height = 500
#对象词用实例方法
haier1.print_info() #可以成功打印高度,宽度
四、魔法方法
xx()
xx() 的函数叫做魔法方法,指具有特殊功能的函数
xx()
xx()方法的作用:初始化对象
洗衣机的宽度高度,应该在生成前就确定了,即在类中确定
class Washer():
def __init__(self): #函数--实现功能
self.width =500
self.height = 800
#获取实例属性
def print_info(self):
print(self.width)
print(f'洗衣机的高度是{self.height}')
haier = Washer()
haier.print_info() #成功输出
注意:
- __init__方法创建对象时自动调用,不用再手动调用
- init(self)中self也不需要手动传递,自动把创建的对象传递过去
带参数的__into__()
一个类可以创建多个对象,如何对不同的对象设置不同的初始化属性?
答:传参数
class Washer():
def __init__(self,width,height): #函数--实现功能
self.width =width
self.height = height
#获取实例属性
def print_info(self):
print(self.width)
print(f'洗衣机的高度是{self.height}')
haier1 = Washer(500,800) #创建对象时,传入参数
haier1.print_info() #成功输出
haier2 = Washer(10,20) #创建对象时,传入参数
haier2.print_info() #成功输出
str()
print()输出对象时,打印的是对象的内存地址。如果类中定义了__str__方法,那么打印出的内容会变成__str__里面return的内容
class Washer():
def __init__(self):
self.width = 500
def __str__(self):
return '解释说明:类的说明或者对象状态的说明'
haier = Washer()
print(haier) #输出:'解释说明:类的说明或者对象状态的说明'
####del()
当删除对象时,python解释器也会默认调用__del__方法
class Washer():
def __init__(self):
self.width = 500
def __del__(self):
print(f'{self}对象已经被删除')
haier = Washer()
#输出: <__main__ .Washer object at 0x000026118223278>对象已经被删除
魔法方法是程序自动就调用的