面向对象的概念
面向对象是将编程当成一个事物(实例化),而编程就是设置事物能够做什么事。
在面向对象编程过程中,有两个重要的组成部分:类和对象。
类
类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念。
- 特征即是属性(变量);
- 行为即是方法(功能函数)。
对象
面向对象的实现方法
定义类
Python2中,类分为:经典类和新式类。
class 类名():代码......其中:类名要满足标识符命名规则,同时要遵循大驼峰命名习惯。
创建对象
对象又叫实例。
对象名 = 类名()
self
self指的是调用该类时的对象。
**self**存储的是由该类创建的对象的内存地址;- 同一个类可以创建多个对象,每个对象有自己的内存空间。
```python
创建类
class Washer(): def wash(self):print("能洗衣服。")print(self) # 等价于print(haier)
创建对象
haier = Washer()
使用对象——实例方法/对象方法
haier.wash()
<a name="GRBuP"></a># 添加和获取对象属性对象属性既可以**在类外部添加和获取**,也能**在类里面添加和获取**。<a name="VsaAV"></a>## 类外部添加对象属性```python对象名.属性名 = 值如:haier.width = 500
类外部获取对象属性
对象名.属性名如:print(f"haier洗衣机的宽度是{haier.width}")
类内部添加对象属性
self.属性名 = 值
类内部获取对象属性
self.属性名
魔法方法
在Python中,**__xx__()**的函数叫作魔法方法,指的是具有特殊功能的函数。
__init__()
用于初始化对象,主要用于对象属性的初始化。
__init__()方法,在创建对象时,默认会被调用,不需要手动调用;__init__(self)中的**self**参数,不需要开发者传参,编译器会自动把当前的对象引用传递过去。 ```python定义类
class Washer(): def init(self): # 初始化对象属性
self.width = 10self.height = 20
def printInfo(self):
print(f"洗衣机的宽度是{self.width},高度是{self.height}")
实例化对象
haier = Washer() haier.printInfo() # 洗衣机的宽度是10,高度是20
<a name="l6gGI"></a>### 带参数的`__init__()````pythonclass Washer():def __init__(self, width, height): # 带形参self.width = widthself.height = heightdef printInfo(self):print(f"洗衣机的宽度是{self.width},高度是{self.height}")# 实例化对象haier = Washer(19, 20)haier.printInfo() # 洗衣机的宽度是19,高度是20
__str__()
当使用print输出对象时,默认打印对象的内存地址。如果类定义了**__str__()**方法,print输出对象时就会打印该方法中return的数据。
class Washer():def __init__(self, width, height):self.width = widthself.height = heightdef printInfo(self):print(f"洗衣机的宽度是{self.width},高度是{self.height}")def __str__(self):return "这是洗衣机啊"# 实例化对象haier = Washer(19, 20)print(haier) # 这是洗衣机啊
__del__()
当删除对象时,Python解释器默认调用**__del__()**方法。
class Washer():def __init__(self, width, height):self.width = widthself.height = heightdef printInfo(self):print(f"洗衣机的宽度是{self.width},高度是{self.height}")def __str__(self):return "这是洗衣机啊"def __del__(self):print("对象已被删除!")# 实例化对象haier = Washer(19, 20)del haier # 对象已被删除!
面向对象示例1——烤地瓜
"""1.地瓜被烤的时间和对应的地瓜状态:0-3分钟:生的3-5分钟:半生半熟5-8分钟:熟的超过8分钟:烤焦了2.用户可以按自己的需求添加调料"""# 创建地瓜的类class Digua():# 定义初始化属性def __init__(self):# 被烤时间self.cookTime = 0# 烤的状态self.cookStatus = "生的"# 调料列表self.condiments = []# 定义烤地瓜的方法def cook(self, time):"""烤地瓜的方法函数:param time: 烤的时间:return:"""self.cookTime += timeif (self.cookTime >= 0) and (self.cookTime < 3):self.cookStatus = "生的"if (self.cookTime >= 3) and (self.cookTime < 5):self.cookStatus = "半生半熟"if (self.cookTime >= 5) and (self.cookTime < 8):self.cookStatus = "熟了"if self.cookTime >= 8:self.cookStatus = "烤焦了"# 定义添加调料的方法def add_condiments(self, condiments):"""添加调料方法:param condiments: 添加的调料:return:"""self.condiments.append(condiments)# 输出对象状态def __str__(self):return f"这个地瓜烤了{self.cookTime}分钟,状态是{self.cookStatus},添加的调料是{self.condiments}。"# 创建对象digua1 = Digua()# print(digua1)digua1.cook(int(input("请输入你烤的时间:")))digua1.add_condiments(input("请输入你要添加的调料:"))print(digua1)
面向对象示例2——搬家具
# 将小于房子剩余面积的家具摆放在房子中class Furniture():def __init__(self, name, area):self.name = nameself.area = areaclass House():def __init__(self, addr, area):self.addr = addrself.area = areaself.freeArea = areaself.furniture = []def addFurniture(self, Object):"""容纳家具方法函数:param item: 家具的面积:return:"""if self.freeArea >= Object.area:self.furniture.append(Object.name)self.freeArea -= Object.areaelse:print("家具太大,剩余面积不足!")def __str__(self):return f"房子的地址是{self.addr},占地面积是{self.area},剩余面积是{self.freeArea},家具有{self.furniture}。"# 创建家具对象bed = Furniture("双人床", 8)sofa = Furniture("沙发", 5)# 创建房子对象House1 = House("广州", 86)# 调用对象方法House1.addFurniture(bed)House1.addFurniture(sofa)print(House1) # 房子的地址是广州,占地面积是86,剩余面积是73,家具有['双人床', '沙发']。
