⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Python OOP深入

学习继承和多态 · 难度:高级 · +15XP

Python OOP深入

Python OOP 深入 — 魔术方法、属性装饰器与多态

学习前的准备

打开终端,输入 python 进入交互式解释器。本教程假设你已经掌握了 Python OOP 基础知识(类、实例、继承、self)。

魔术方法(Magic Methods)

魔术方法是以双下划线开头和结尾的特殊方法,让你自定义对象的内置行为。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __str__(self):
        return f"Point({self.x}, {self.y})"
    
    def __eq__(self, other):
        return self.x == other.x and self.y == other.y
    
    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)
    
    def __abs__(self):
        return (self.x ** 2 + self.y ** 2) ** 0.5

p1 = Point(1, 2) p2 = Point(1, 2) p3 = Point(3, 4) print(p1) # Point(1, 2) ——调用了 __str__ print(p1 == p2) # True ——调用了 __eq__ print(p1 + p3) # Point(4, 6) ——调用了 __add__ print(abs(Point(3, 4))) # 5.0 ——调用了 __abs__

属性装饰器 @property

@property 让你像访问属性一样调用方法,同时可以做计算和验证。

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:
            raise ValueError("半径必须为正数")
        self._radius = value
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2
    
    @property
    def diameter(self):
        return self._radius * 2

c = Circle(5) print(c.area) # 78.53975 print(c.diameter) # 10 c.radius = 10 # 使用 setter print(c.area) # 314.159

多态(Polymorphism)

不同的类可以定义同名方法,调用者不需要知道具体是哪个类。这就是著名的“鸭子类型”。

class Dog:
    def speak(self):
        return "汪汪!"

class Cat: def speak(self): return "喵喵!"

class Duck: def speak(self): return "嘎嘎!"

def animal_sound(animal): print(animal.speak())

animal_sound(Dog()) # 汪汪! animal_sound(Cat()) # 喵喵! animal_sound(Duck()) # 嘎嘎!

小结

魔术方法让你的类支持 Python 的内置操作。@property 让你用属性语法实现带逻辑的访问。多态让你写通用的代码,处理不同的对象。这三个特性构成了 Python OOP 的高级工具箱。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 152 篇
0 完成
🔥 0