面向对象的概念
面向对象是将编程当成一个事物(实例化),而编程就是设置事物能够做什么事。
在面向对象编程过程中,有两个重要的组成部分:类和对象。
类
类是对一系列具有相同特征和行为的事物的统称,是一个抽象的概念。
- 特征即是属性(变量);
- 行为即是方法(功能函数)。
对象
面向对象的实现方法
定义类
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 = 10
self.height = 20
def printInfo(self):
print(f"洗衣机的宽度是{self.width},高度是{self.height}")
实例化对象
haier = Washer() haier.printInfo() # 洗衣机的宽度是10,高度是20
<a name="l6gGI"></a>
### 带参数的`__init__()`
```python
class Washer():
def __init__(self, width, height): # 带形参
self.width = width
self.height = height
def 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 = width
self.height = height
def 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 = width
self.height = height
def 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 += time
if (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 = name
self.area = area
class House():
def __init__(self, addr, area):
self.addr = addr
self.area = area
self.freeArea = area
self.furniture = []
def addFurniture(self, Object):
"""
容纳家具方法函数
:param item: 家具的面积
:return:
"""
if self.freeArea >= Object.area:
self.furniture.append(Object.name)
self.freeArea -= Object.area
else:
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,家具有['双人床', '沙发']。