跳转至

第七章:面向对象

类的定义

class Person:
    """人员类"""

    def __init__(self, name, age):
        self.name = name
        self.age = age

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

    def __str__(self):
        return f"Person({self.name}, {self.age})"

# 创建实例
p = Person("Alice", 25)
print(p.introduce())

继承

class Student(Person):
    """学生类继承自 Person"""

    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade

    def introduce(self):
        return f"我是{self.name}{self.grade}年级学生"

# 多重继承
class A:
    def method(self):
        return "A"

class B:
    def method(self):
        return "B"

class C(A, B):  # 继承顺序:A 优先
    pass

封装

class BankAccount:
    def __init__(self, balance):
        self.__balance = balance  # 私有属性

    def deposit(self, amount):
        if amount > 0:
            self.__balance += amount

    def withdraw(self, amount):
        if 0 < amount <= self.__balance:
            self.__balance -= amount
            return amount
        return 0

    def get_balance(self):
        return self.__balance

# 属性装饰器
class Circle:
    def __init__(self, radius):
        self._radius = radius

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, value):
        if value > 0:
            self._radius = value

    @property
    def area(self):
        return 3.14 * self._radius ** 2

类方法和静态方法

class MyClass:
    count = 0

    def __init__(self):
        MyClass.count += 1

    @classmethod
    def get_count(cls):
        return cls.count

    @staticmethod
    def helper():
        return "这是一个静态方法"

魔术方法

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

    def __len__(self):
        return int((self.x**2 + self.y**2)**0.5)

v1 = Vector(3, 4)
v2 = Vector(1, 2)
v3 = v1 + v2  # Vector(4, 6)