Python面向对象编程详解
- object oriented programming
- OOP面向对象程序设计
- java C#只支持面向对象编程
- python既支持面向过程编程也支持面向对象编程
1. 面向对象编程基础
1.1 什么是面向对象编程
面向对象编程(Object-Oriented Programming, OOP)是一种程序设计范式,它将数据和操作数据的方法组织到对象中。
1.2 Python的编程范式支持
- 支持面向过程编程
- 支持面向对象编程
- 支持函数式编程
2. 类的定义与使用
2.1 基本语法
class ClassName(object):
"""类的文档字符串"""
# 类属性
class_attribute = None
# 初始化方法
def __init__(self, param1, param2):
self.param1 = param1 # 实例属性
self.param2 = param2
# 实例方法
def instance_method(self):
print(f"处理 {self.param1}")
2.2 命名规范
- 类名使用CamelCase命名法
- 方法和属性使用lowercase_with_underscores命名法
- 私有属性和方法前加双下划线__
2.3 实例化示例
# 创建学生类
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
return f"我是{self.name},今年{self.age}岁"
# 实例化
student1 = Student("张三", 18)
student2 = Student("李四", 20)
print(student1.introduce()) # 输出:我是张三,今年18岁
3. self关键字详解
3.1 self的作用
self代表类的实例本身,用于在类中访问实例的属性和方法。
3.2 self的使用规范
class Example:
def method1(self): # self是推荐的命名
return "使用self"
def method2(this): # 可以使用其他名称,但不推荐
return "使用this"
def method3(self, param): # self必须是第一个参数
return f"self和其他参数: {param}"
3.3 self的工作原理
class Car:
def __init__(self, brand):
self.brand = brand
def show_brand(self):
print(f"这是一辆{self.brand}")
# 两种等价的调用方式
car = Car("Toyota")
car.show_brand() # 方式1:通过实例调用
Car.show_brand(car) # 方式2:通过类调用(显式传递self)
4. 特殊方法
4.1 __init__方法
class Person:
def __init__(self, name, age):
"""
初始化方法,创建实例时自动调用
"""
self.name = name
self.age = age
print(f"创建了一个新的Person实例:{name}")
4.2 __str__方法
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def __str__(self):
"""定义对象的字符串表示"""
return f"《{self.title}》 作者:{self.author}"
# 使用示例
book = Book("Python编程", "张三")
print(book) # 输出:《Python编程》 作者:张三
5. 属性访问控制
5.1 Getter和Setter方法
class BankAccount:
def __init__(self):
self.__balance = 0 # 私有属性
def get_balance(self):
"""获取余额"""
return self.__balance
def set_balance(self, amount):
"""设置余额"""
if amount >= 0:
self.__balance = amount
else:
raise ValueError("余额不能为负数")
# 使用示例
account = BankAccount()
account.set_balance(1000)
print(account.get_balance()) # 1000
5.2 使用Property装饰器
class Person:
def __init__(self):
self.__age = 0
@property
def age(self):
"""年龄获取器"""
return self.__age
@age.setter
def age(self, value):
"""年龄设置器"""
if 0 <= value <= 150:
self.__age = value
else:
raise ValueError("年龄必须在0-150之间")
# 使用示例
person = Person()
person.age = 25 # 使用setter
print(person.age) # 使用getter
6. 实践建议
6.1 封装原则
- 使用私有属性(双下划线前缀)隐藏实现细节
- 提供公共方法访问私有属性
- 在setter方法中进行数据验证
6.2 命名规范
class StudentManager:
def __init__(self):
self.__students = [] # 私有属性用双下划线
self._school = "清华" # 保护属性用单下划线
self.version = "1.0" # 公共属性直接命名
def add_student(self, student): # 方法用小写加下划线
"""添加学生"""
self.__students.append(student)
6.3 文档字符串
class Database:
"""数据库连接类
用于管理数据库连接和执行数据库操作
Attributes:
host: 数据库主机地址
port: 数据库端口
username: 用户名
"""
def connect(self):
"""建立数据库连接
Returns:
bool: 连接成功返回True,否则返回False
"""
pass