1.什么是面向对象
?向对象就是将编程当成是?个事物,对外界来说,事物是直接使?的,不?去管他内部的情况。?编程就是设置事物能够做什么事
面向对象的思想简化了过程,在使用时可以更加方便直观
2.类和对象
在?向对象编程过程中,有两个重要组成部分:类 和 对象 类和对象的关系:?类去创建?个对象
2.1理解什么是类和对象
2.1.1什么是类
**类是对?系列具有相同特征和?为的事物的统称,是?个抽象的概念,不是真实存在的事物。*
2.1.2什么是对象
对象是类创建出来的真实存在的事物
注意:开发中,先有类,再有对象(例如在动物这个类里面有许多的)
2.2面向对象的实现方法
2.2.1定义类
语法:
class 类名():
代码 ......
示例:
class wahser():
def wash(self):
print('洗衣服')
2.2.2定义对象(实例)
语法:对象名=类名() 示例:
class Wahser():
def wash(self):
print('洗衣服')
haier=Wahser()
print(haier)
haier.wash()
运行结果:
2.2.3self(调用该函数的对象)
示例:
class Wahser():
def wash(self):
print(self)
print(Wahser())
haier1=Wahser()
haier1.wash()
此时的print(self)和print(Washer)的结果是一样的 注意:打印对象和self得到的结果是?致的,都是当前对象的内存中存储地址
3.添加和获取对象属性
3.1 类外?添加对象属性
1)语法:对象名.属性名 = 值 2)示例:
haier1.width=1000
haier1.height=20
3.2 类外?获取对象属性
示例:
class Wahser():
def wash(self):
print(self)
haier1=Wahser()
haier1.width=1000
haier1.height=20
print(f'洗衣机的宽度是{haier1.width},高度是{haier1.height}')
运行结果:
3.3 类??获取对象属性
示例:
class Wahser():
def wash(self):
print(f'haire1的宽度是{haier1.width},haier1的高度是{haier1.height}')
print('上面的是函数内的执行')
haier1=Wahser()
haier1.width=1000
haier1.height=20
haier1.wash()
print(f'洗衣机的宽度是{haier1.width},高度是{haier1.height}')
4.魔法方法
在Python中,xx()的函数叫做魔法?法,指的是具有特殊功能的函数
4.1__init__()
示例:
class Washer():
def __init__(self) -> None:
self.height=1000
self.width=10
def wash(self):
print(f'宽度是:{self.width},高度是{self.height}')
haier1=Washer()
print(haier1.height)
print(haier1.width)
haier1.wash()
运行结果:
注意事项:
-
init()?法,在创建?个对象时默认被调?,不需要?动调?
init(self)中的self参数,不需要开发者传递,python解释器会?动把当前的对象引?传递过去
4.2 带参数的__init__()
应用场景:?个类可以创建多个对象,如何对不同的对象设置不同的初始化属性?——传参数
class Washer():
def __init__(self,height,width) -> None:
self.height=height
self.width=width
def wash(self):
print(f'宽度是:{self.width},高度是{self.height}')
haier1=Washer(100,20)
print(haier1.height)
print(haier1.width)
haier1.wash()
运行结果:
4.3 str()
当使?print输出对象的时候,默认打印对象的内存地址。如果类定义了__str__?法,那么就会打印从在这个?法中 return 的数据
示例:
class Washer():
def __init__(self,height,width) -> None:
self.height=height
self.width=width
def __str__(self) -> str:
return '这是haier洗衣机'
def wash(self):
print(f'宽度是:{self.width},高度是{self.height}')
haier1=Washer(10,29)
print(haier1)
运行结果:
4.4__del__()(当执行del时会调用的代码)
当删除对象时,python解释器也会默认调?__del__()?法
示例:
class Washer():
def __init__(self,height,width) -> None:
self.height=height
self.width=width
def __str__(self) -> str:
return '这是haier洗衣机'
def wash(self):
print(f'宽度是:{self.width},高度是{self.height}')
def __del__(self):
print('当删除对象时执行的代码')
haier=Washer(10,200)
del haier
5.面向对象实例
1)实例1
class Sweetpotato():
def __init__(self):
"""初始化实例对象的属性"""
self.cooktime=0
self.cook_static='生的'
self.add=[]
def cook_time(self,time):
"""制作的时间,以及随着时间变化食物的状态"""
self.cooktime+=time
if self.cooktime<=3:
self.cook_static='生的'
elif 3<self.cooktime<=6:
self.cook_static='半生不熟'
elif 6<self.cooktime<=9:
self.cook_static='熟了'
else:
self.cook_static='烤焦了'
def add_food(self,food):
"""添加食物"""
self.add.append(food)
def __str__(self):
"""定义str属性,返回此时sweetpotato的制作状态print(对象名)"""
return f'此时的sweetpotato的制作时间是{self.cooktime},烤制的状态是{self.cook_static}。烤制添加的食物是{self.add}'
sweetpotato1=Sweetpotato()
print(sweetpotato1)
sweetpotato1.cook_time(5)
sweetpotato1.add_food('lajiao')
print(sweetpotato1)
运行结果: 2)实例2
class Furniture():
def __init__(self,name,area):
self.name=name
self.area=area
class Home():
def __init__(self,address,area):
self.address=address
self.area=area
self.free_area=area
self.furniture=[]
def __str__(self):
return f'房屋的地址是{self.address},房屋的面积是{self.area},剩余面积是{self.free_area},家具分别为{self.furniture}'
def add_furniture(self,item):
if self.free_area>=item.area:
self.free_area-=item.area
self.furniture.append(item.name)
else:
print('空间不足')
bed=Furniture('双人床',10)
home1=Home('北京',1000)
print(home1)
home1.add_furniture(bed)
print(home1)
sofa=Furniture('沙发',6)
home1.add_furniture(sofa)
print(home1)
playgrond=Furniture('操场',2000)
home1.add_furniture(playgrond)
print(home1)
|