📜  面向对象的Python构建块(1)

📅  最后修改于: 2023-12-03 15:28:53.211000             🧑  作者: Mango

面向对象的 Python 构建块(Object-Oriented Python Building Blocks)

Python 是一种面向对象的编程语言。在 Python 中,每个对象都有其属性(attributes)和方法(methods)。这些对象可以根据其类型进行分类,这些类型可以是 Python 中的预定义类,也可以是您自己定义的类。

类和对象

在 Python 中,类是对象的模板或蓝图。您可以使用类定义一个新类型的对象。对象是类的实例。比如,假设您定义了一个类叫做 Dog,则一个实际的狗就是 Dog 类的一个对象。

在 Python 中定义类可以通过使用 class 关键字。例如:

class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    def bark(self):
        print("Woof!")

在上面的代码中,我们定义了一个 Dog 类,它有一个构造函数 __init__,它接受两个参数:namebreed,并将它们保存为该类的属性。该类还定义了一个名为 bark 的方法。

您可以使用以下代码创建一个 Dog 对象:

my_dog = Dog("Buddy", "Golden Retriever")

现在,my_dog 就是 Dog 类的一个实例,可以通过 my_dog 使用 Dog 类的属性和方法。

print(my_dog.name)  # 输出 "Buddy"

my_dog.bark()  # 输出 "Woof!"
继承

继承是面向对象编程的一个关键概念。它允许您定义一个新类,该新类继承现有类的某些属性和方法。新类通常称为子类,原始类称为父类。

在 Python 中,您可以通过使用括号指定父类来创建子类。例如,以下代码定义了一个 Poodle 类,该类继承了 Dog 类:

class Poodle(Dog):
    def dance(self):
        print("I am dancing!")

my_poodle = Poodle("Lucy", "Poodle")
my_poodle.bark()  # 输出 "Woof!"
my_poodle.dance()  # 输出 "I am dancing!"

在上面的代码中,我们将 Poodle 类指定为 Dog 类的子类。 Poodle 类还有一个名为 dance 的新方法。

使用子类时,它可以使用它继承的所有父类的属性和方法,并且还可以有自己独有的属性和方法。

封装

封装是对象指挥其内部工作原理的过程。她允许对象隐藏其内部状态,并通过使用接口来访问该状态。在Python中,我们使用公共和私有方法来实现封装。

私有方法使用两个下划线作为前缀。例如:

class Cat:
    def __init__(self, name):
        self.__name = name

    def __meow(self):
        print("Meow!")

    def speak(self):
        self.__meow()

my_cat = Cat("Fluffy")
my_cat.speak()  # 输出 "Meow!"
my_cat.__meow()  # 抛出 AttributeError 异常,因为 __meow 是私有方法

在上述代码中,我们定义了一个 Cat 类,它有一个私有方法 __meow 和一个名为 speak 的公共方法。 __nameCat 类的私有属性。

在代码中,可以通过 my_cat.speak() 调用 __meow 私有方法,但不能直接使用 my_cat.__meow() 调用。

多态

多态允许对象可以根据环境的不同来采取不同的行动。在 Python 中,我们可以实现多态性,方法是定义许多具有相同名称的不同函数,并在运行时根据对象的类型来调用正确的函数。

以下是一个使用多态性的例子:

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("Woof!")

class Cat(Animal):
    def speak(self):
        print("Meow!")

def animal_speak(animal):
    animal.speak()

dog = Dog()
cat = Cat()

animal_speak(dog)  # 输出 "Woof!"
animal_speak(cat)  # 输出 "Meow!"

在上述代码中,我们定义了一个 speak 方法的抽象基类 Animal 和两个实际子类 DogCat,它们各自实现了自己的 speak 方法。我们还为 Animal 类定义了一个名为 animal_speak 的函数,该函数接受 Animal 类的实例作为参数,并调用该实例的 speak 方法。最后,我们使用 animal_speak 函数分别调用了 DogCat 实例。由于多态性,它们调用相应的 speak 方法,而不需要在运行时刻判断继承类型。

结论

Python 是一个面向对象的编程语言,通过使用类、继承、封装和多态,您可以轻松地定义和使用自己的对象。您只需要学习这些基本的构建块,并开始创建自己的对象即可。