← 返回首页
🐍

面向对象基础

📂 python ⏱ 2 min 275 words

什么是面向对象编程

面向对象编程(OOP)是一种编程范式,它将数据和操作数据的方法组织成对象。这种编程方式更符合人类的思维方式,便于代码的组织和复用。

# 定义一个简单的类
class Dog:
    def bark(self):
        print("汪汪!")

# 创建对象
my_dog = Dog()
my_dog.bark()  # 输出: 汪汪!

类的定义

类是对象的蓝图,它定义了对象的属性和方法。

class Person:
    # 类属性(所有实例共享)
    species = "人类"

    def __init__(self, name, age):
        # 实例属性(每个实例独有)
        self.name = name
        self.age = age

    def introduce(self):
        return f"我叫{self.name},今年{self.age}岁"

# 创建实例
person1 = Person("张三", 25)
person2 = Person("李四", 30)

print(person1.introduce())  # 输出: 我叫张三,今年25岁
print(person2.introduce())  # 输出: 我叫李四,今年30岁

__init__方法

__init__是构造方法,在创建对象时自动调用,用于初始化对象的属性。

class BankAccount:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.balance = balance
        self.created_at = datetime.now()

    def deposit(self, amount):
        if amount > 0:
            self.balance += amount
            return True
        return False

    def withdraw(self, amount):
        if 0 < amount <= self.balance:
            self.balance -= amount
            return True
        return False

# 使用示例
account = BankAccount("张三", 1000)
account.deposit(500)
print(f"余额: {account.balance}")  # 输出: 余额: 1500

self参数

self代表类的实例本身,通过它可以访问实例的属性和方法。

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * (self.width + self.height)

    def is_square(self):
        return self.width == self.height

# 使用示例
rect = Rectangle(5, 3)
print(f"面积: {rect.area()}")        # 输出: 面积: 15
print(f"周长: {rect.perimeter()}")    # 输出: 周长: 16
print(f"是否为正方形: {rect.is_square()}")  # 输出: 是否为正方形: False

实例属性与类属性

类属性属于类本身,所有实例共享;实例属性属于特定实例,每个实例独立拥有。

class Employee:
    # 类属性
    company = "Python公司"
    employee_count = 0

    def __init__(self, name, salary):
        # 实例属性
        self.name = name
        self.salary = salary
        Employee.employee_count += 1

# 创建实例
emp1 = Employee("张三", 50000)
emp2 = Employee("李四", 60000)

# 访问类属性
print(Employee.company)      # 输出: Python公司
print(Employee.employee_count)  # 输出: 2

# 访问实例属性
print(emp1.name)  # 输出: 张三
print(emp2.name)  # 输出: 李四

方法的类型

Python类可以定义不同类型的方法。

class Circle:
    def __init__(self, radius):
        self.radius = radius

    # 实例方法
    def area(self):
        return 3.14159 * self.radius ** 2

    # 类方法
    @classmethod
    def from_diameter(cls, diameter):
        return cls(diameter / 2)

    # 静态方法
    @staticmethod
    def is_valid_radius(value):
        return isinstance(value, (int, float)) and value > 0

# 使用示例
circle1 = Circle(5)
circle2 = Circle.from_diameter(10)

print(circle1.area())  # 输出: 78.53975
print(Circle.is_valid_radius(5))  # 输出: True

最佳实践

面向对象编程是Python的核心特性之一,掌握它能让你写出更清晰、更易维护的代码。