【Python学习】面向对象(OOP)

让我们从Python面向对象编程(OOP)的基础概念开始,逐步深入到继承、多态、特殊方法和运算符重载。

一、类和对象

什么是类和对象?

  • 类(Class):类是创建对象的蓝图或模板。它定义了一组属性和方法,这些属性和方法描述了对象的行为和状态。

  • 对象(Object):对象是类的实例。每个对象都有属于自己的数据和方法。

1、定义类

在Python中,使用 `class` 关键字定义一个类。

python 复制代码
class Dog:
    # 类属性
    species = "Canis familiaris"

    # 初始化方法(构造函数)
    def __init__(self, name, age):
        self.name = name  # 实例属性
        self.age = age    # 实例属性

    # 实例方法
    def description(self):
        return f"{self.name} is {self.age} years old"

    # 实例方法
    def speak(self, sound):
        return f"{self.name} says {sound}"

2、创建对象

创建对象的过程称为实例化。

python 复制代码
# 创建一个Dog类的实例
my_dog = Dog("Buddy", 3)

# 访问实例属性
print(my_dog.name)  # 输出: Buddy
print(my_dog.age)   # 输出: 3

# 调用实例方法
print(my_dog.description())  # 输出: Buddy is 3 years old
print(my_dog.speak("Woof Woof"))  # 输出: Buddy says Woof Woof

二、继承和多态

继承

继承允许我们定义一个类,该类可以继承另一个类的属性和方法。被继承的类称为父类或基类,新类称为子类或派生类。

python 复制代码
# 定义一个基类
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

# 定义一个派生类
class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof Woof"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow"

多态

多态是指同一个方法在不同的类中有不同的实现。它允许我们在不考虑对象具体类型的情况下使用对象。

python 复制代码
animals = [Dog("Buddy"), Cat("Whiskers")]

for animal in animals:
    print(animal.speak())

# 输出:
# Buddy says Woof Woof
# Whiskers says Meow

三、 特殊方法和运算符重载

特殊方法

特殊方法(也称为魔术方法)是Python中以双下划线开头和结尾的方法。这些方法在特定情况下会被自动调用。
常见的特殊方法包括:

`init(self, ...)`:构造函数,在对象初始化时调用。

`str(self)`:在使用 `print()` 函数或 `str()` 函数时调用,返回一个字符串。

`repr(self)`:在使用 `repr()` 函数或调试时调用,返回一个字符串。

python 复制代码
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"{self.name} is {self.age} years old"

    def __repr__(self):
        return f"Dog(name={self.name}, age={self.age})"

运算符重载

运算符重载允许我们定义对象如何响应内置运算符。例如,我们可以定义两个对象相加时的行为。

python 复制代码
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 __str__(self):
        return f"Vector({self.x}, {self.y})"

v1 = Vector(2, 3)
v2 = Vector(5, 7)
v3 = v1 + v2
print(v3)  # 输出: Vector(7, 10)

总结

通过学习类和对象、继承和多态、以及特殊方法和运算符重载,咱可以掌握Python面向对象编程的核心概念。这些知识将帮助咱编写更模块化、可重用和可维护的代码。

相关推荐
The Future is mine41 分钟前
Python计算经纬度两点之间距离
开发语言·python
Enti7c42 分钟前
HTML5和CSS3的一些特性
开发语言·css3
九月镇灵将43 分钟前
GitPython库快速应用入门
git·python·gitpython
爱吃巧克力的程序媛1 小时前
在 Qt 创建项目时,Qt Quick Application (Compat) 和 Qt Quick Application
开发语言·qt
杉之1 小时前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
兔子的洋葱圈1 小时前
【django】1-2 django项目的请求处理流程(详细)
后端·python·django
独好紫罗兰2 小时前
洛谷题单3-P5719 【深基4.例3】分类平均-python-流程图重构
开发语言·python·算法
27669582922 小时前
美团民宿 mtgsig 小程序 mtgsig1.2 分析
java·python·小程序·美团·mtgsig·mtgsig1.2·美团民宿
橘子在努力2 小时前
【橘子大模型】关于PromptTemplate
python·ai·llama
篝火悟者2 小时前
自学-C语言-基础-数组、函数、指针、结构体和共同体、文件
c语言·开发语言