c语言编程笔录

您现在的位置是:首页 > 编程 > 编程经验

编程经验

Python Object Programm ng 构建可重用和灵活的代码

吕致盈 2023-09-14编程经验
PythonObjectProgramming简介Python是一种面向对象的高级编程语言,具备很好的可读性、可重用性和灵活性,最近几年也逐渐成为了众多编程领域的主流语言之一。面向对象编程(OOP)技术可以为软

Python Object Programming 简介

Python 是一种面向对象的高级编程语言,具备很好的可读性、可重用性和灵活性,最近几年也逐渐成为了众多编程领域的主流语言之一。面向对象编程(OOP) 技术可以为软件开发提供很多好处,例如模块化设计、高内聚低耦合、代码可重用性强等。因此,在实践中,我们应该尽可能地使用 OOP 技术去设计和编写我们的应用程序。

class Dog:
    def __init__(self, name):
        self.name = name
        
    def bark(self):
        print(f"{self.name}: 汪汪汪!")

在上述代码中,我们定义了一个 Dog 类,其具有名为 name 的实例变量和一个名为 bark 的实例方法。通过构造函数 __init__(),我们把参数 name 定义成了该类的实例变量。在 bark() 方法中,我们打印了一条信息,并使用字符串格式化技术把 Dog 的名字插入到信息字符串中。

类继承和多态的应用

在 OOP 中,类继承可以让我们通过定义新的类来继承旧类的所有特征和方法。继承是一个非常强大的特性,我们可以利用它来避免代码重复,降低开发成本,并且更好地组织和管理我们的代码库。多态则指的是一种通用的技巧,可以让我们在需要时通过改变一个对象的类来调用不同的方法。

class Animal:
    def __init__(self, name):
        self.name = name
        
    def speak(self):
        raise NotImplementedError("必须重写 speak() 方法!")
        
class Cat(Animal):
    def speak(self):
        print(f"{self.name}: 喵喵喵!")
        
class Dog(Animal):
    def speak(self):
        print(f"{self.name}: 汪汪汪!")

在上述代码中,我们定义了一个 Animal 类和两个子类:Cat 和 Dog。这两个子类都继承了 Animal 类,并重写了其中的 speak() 方法。这样,当我们对像 cat 和 dog 这样的实例调用 speak() 方法时,它们将根据各自的类型采用不同的行为。

Python 的特殊方法(魔术方法)

Python 中提供了许多特殊方法(也被称为魔术方法或者双下划线方法),这些方法都具有特殊的含义和用途。例如,我们可以通过 __init__() 方法来初始化一个对象,通过 __str__() 方法来返回对该对象进行 str() 调用时的字符串表示等等。

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        
    def __str__(self):
        return f"<{self.x}, {self.y}>"
    
    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)
        
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2)   # 输出: <4, 6>

在上述代码中,我们定义了一个 Vector 类,并实现了 __init__() 构造函数、__str__() 方法和 __add__() 方法。当我们对该类进行加法操作并输出时,该类会自动调用 __str__() 方法进行字符串化,输出 <4, 6>。

Python 中的继承和接口(抽象基类)

在 Python 中,抽象基类是 OOP 中的一种基础概念,常用于实现继承和接口的机制。抽象基类是一种特殊的类,不能直接实例化,而是用来为其他类声明接口或者提供一些共同的行为。通过使用抽象基类,我们想要确保所有的子类至少提供某些特定的方法,否则将会触发异常并报错。

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def speak(self):
        pass
        
class Cat(Animal):
    def speak(self):
        print("喵喵喵!")
        
class Dog(Animal):
    def speak(self):
        print("汪汪汪!")
        
class Cow:
    def moo(self):
        print("哞哞哞!")

class Sheep:
    def baa(self):
        print("咩咩咩!")

animals = [Cat(), Dog(), Cow(), Sheep()]
for animal in animals:
    if isinstance(animal, Animal):
        animal.speak()

在上述代码中,我们定义了一个 Animal 抽象基类以及多个子类。其中,Cat 和 Dog 类都继承了 Animal 类,并实现了 speak() 方法。Cow 和 Sheep 类则没有实现 speak() 方法并且没有继承 Animal 类。最后,我们用 isinstance() 方法来检查 animals 列表中的实例类型,如果是 Animal 的实例,则调用 speak() 方法。

文章评论