面向对象编程/类
在面向对象编程 (OOP) 中,类是一种用于创建对象的蓝图。它定义了一种新的数据类型,封装了与特定实体或概念相关的数据和行为(方法)。类可以作为模板,允许我们创建具有相似特征和行为的多个对象。类本质上是一个用于存放大量函数的容器,这些函数可以相互依赖,也可以在类中独立运行。
类包含两个主要组成部分:属性(也称为特性或数据成员)和方法(也称为成员函数)。
1. 属性:属性是表示对象状态的变量。它们存储有关对象特征的信息。在动物类比中,属性可以包括species
、name
、age
、weight
、color
等。属性定义了对象可以保存哪些数据。
2. 方法:方法是定义对象行为的函数。它们表示对象可以执行的操作。在动物类比中,方法可以包括“make_sound()
”、“move_type()
”、“eat_what()
”等。方法定义了对象可以执行哪些操作。
大多数类都是单独的 Python 文件,可以被其他 Python 文件使用或访问。将类放在单独的页面上允许其他 Python 文件调用和引用该类,而不会直接影响类中的代码。类可用于计算方程式,注册用户输入并对其进行操作,以及向其他 Python 文件引发异常,同样不会直接受到其他 Python 文件代码的影响。
子类本质上是类的子类。将类视为父母,将子类视为孩子。父类可以将属性或函数传递给子类。或者可以将其视为孩子从父母那里继承东西。子类用于更复杂的程序,这些程序在一个宏观概念下利用多个想法。
下面是使用 Python(或大多数其他 OOP 语言)创建类的模板,我们使用class
关键字后跟类名和冒号。在类中,我们定义属性和方法。
class MyClass:
# Constructor method (__init__) initializes object attributes
def __init__(self, attribute1, attribute2):
self.attribute1 = attribute1
self.attribute2 = attribute2
# Method 1
def method1(self):
# Method code here
# Method 2
def method2(self):
# Method code here
以下是用 Python 创建 Animal 类蓝图的真实示例。这是一个所有动物的蓝图,称为“Animal”类,它将包含所有动物园动物共有的属性和行为。在这个类中,我们定义了属性,如“species
”、“name
”和“age
”。我们还有两个方法:“make_sound()
”、“move_type()
”、eat_what()
。目前这些方法是空的(用pass
标记),因为每种动物都将以不同的方式实现它们。
class Animal:
def __init__(self, species, name, age):
self.species = species
self.name = name
self.age = age
def make_sound(self):
pass
def move(self):
pass
现在,我们将创建一个单独的类Zebra
,如下所示
class Zebra(Animal):
def __init__(self, name, age):
super().__init__("Zebra", name, age)
def make_sound(self):
return "Bray"
def move(self):
return "Galloping."
正如您在这些类中看到的,我们使用继承来继承 Animal 类的属性和方法。然后,我们覆盖了“make_sound()”和“move()”方法,以实现每种动物的特定声音和移动行为。
现在,我们已经创建了一个斑马类动物,我们现在可以创建单独的动物对象,并在主程序中与它们进行交互。
def main():
# Create animal objects
zebra1 = Zebra("Marty", 10)
# Interact with other animals
print({zebra1.name} " the " {zebra1.species} " says: " {zebra1.make_sound()})
#Marty the Zebra says : bray
#Interact with enviroments
print({zebra1.name} " the " {zebra1.species} " aged " {zebra1.age} {zebra1.move()})
#Marty the Zebra aged 10 galloping
if __name__ == "__main__":
main()