### 详解Python中类的定义与使用
#### 一、类的基本概念
在面向对象编程中,类是一种抽象的数据类型,用于表示具有相似特性和行为的对象集合。在Python中,类通过`class`关键字来定义。
#### 二、类的定义
在Python中定义一个类非常直观简单,可以通过以下格式:
```python
class ClassName:
# 类的定义内容
```
例如文章中的示例代码定义了一个`Hotel`类:
```python
class Hotel(object):
"""docstring for Hotel"""
def __init__(self, room, cf=1.0, br=15):
self.room = room
self.cf = cf
self.br = br
def cacl_all(self, days=1):
return (self.room * self.cf + self.br) * days
```
- `__init__` 方法:这是一个特殊的方法,被称为构造器或初始化方法,在创建新对象时被调用。
- `self`: Python 中的`self` 参数代表的是类的实例本身,即当前对象。它是默认参数,每个方法的第一个参数都是`self`,但调用时无需传递这个参数。
- 属性:在`__init__` 方法中定义了类的属性,如`room`, `cf`, `br`。这些属性用于存储对象的状态。
- 方法:类中定义的函数称为方法。比如上面例子中的`cacl_all` 方法。
#### 三、父类与子类
- **父类**:也称为基类或超类,是指被其他类继承的类。
- **子类**:继承自父类的类。子类可以重写或扩展父类的功能。
#### 1. 父类定义
在Python中,定义一个父类非常简单,只需按照类的普通定义方式即可:
```python
class AddBook(object):
def __init__(self, name, phone):
self.name = name
self.phone = phone
def get_phone(self):
return self.phone
```
#### 2. 子类定义
子类通过继承父类的方式定义,并可以在子类中重写或添加新的方法:
```python
class EmplEmail(AddBook):
def __init__(self, nm, ph, email):
# 调用父类构造器
super(EmplEmail, self).__init__(nm, ph)
self.email = email
def get_email(self):
return self.email
```
- `super()` 函数:用于调用父类的方法,这里用于调用父类的`__init__` 方法。
#### 3. 子类调用父类方法
子类可以直接访问父类的方法,也可以通过`super()` 来调用父类的方法:
```python
alice = EmplEmail('alice', '18210418888', 'alice@xkops.com')
print(alice.get_email(), alice.get_phone())
```
#### 四、类的组合使用
类的组合是指在一个类中包含其他类的实例作为其成员变量,从而实现更复杂的功能。这种方式可以提高程序的灵活性和可维护性。
#### 示例代码分析
```python
class Info(object):
def __init__(self, phone, email, qq):
self.phone = phone
self.email = email
self.qq = qq
def get_phone(self):
return self.phone
def update_phone(self, newphone):
self.phone = newphone
print("手机号更改已更改")
class AddrBook(object):
'''docstring for AddBook'''
def __init__(self, name, phone, email, qq):
self.name = name
self.info = Info(phone, email, qq)
if __name__ == "__main__":
Detian = AddrBook('handetian', '18210413001', 'detian@xkops.com', '123456')
print(Detian.info.get_phone())
Detian.info.update_phone(18210413002)
print(Detian.info.get_phone())
```
- `Info` 类:用于封装电话号码、电子邮件和QQ等信息。
- `AddrBook` 类:用于存储联系人信息,其中包含了`Info` 类的一个实例。
- 在主函数中创建`AddrBook` 类的实例,并通过调用`Info` 类的方法来更新电话号码。
#### 五、内置功能
Python为类提供了许多内置功能,如`__str__`, `__repr__`, `__len__` 等特殊方法,用于定制对象的行为。
通过本文的介绍,读者应该对Python中的类有了较为全面的理解,包括如何定义类、如何使用继承和组合等高级特性。这些知识对于深入学习面向对象编程至关重要。