有三种广泛使用的编程示例:过程编程,函数编程和面向对象的编程,Python 支持所有三种编程。
面向对象编程(OOP)是一种使用对象及其相互作用设计应用和计算机程序的编程示例。
OOP 中有一些基本的编程概念:
- 抽象化
- 多态性
- 封装形式
- 继承
抽象通过建模适合该问题的类来简化复杂的现实。 多态性是将运算符或函数以不同方式用于不同数据输入的过程。 封装对其他对象隐藏了类的实现细节。 继承是一种使用已经定义的类形成新类的方法。
Python 对象
Python 中的所有内容都是一个对象。 对象是 Python OOP 程序的基本构建块。
object_types.py
在此示例中,我们显示所有这些实体实际上都是对象。 type()
函数返回指定对象的类型。
整数,字符串,列表,字典,元组,函数和模块是 Python 对象。
Python 类关键字
先前的对象都是 Python 编程语言的内置对象。 用户定义的对象是使用class
关键字创建的。 该类是定义未来对象性质的蓝图。 从类中,我们构造实例。 实例是从特定类创建的特定对象。 例如,Huck 可能是 Dog 类的实例。
first_object.py
这是我们的头等舱。 该类的主体暂时留空。 按照惯例,给类起一个以大写字母开头的名称。
在这里,我们定义First
类。 请注意,默认情况下,所有类均从基object
继承。
在这里,我们创建First
类的新实例。 换句话说,我们实例化了First
类。 fr
是对我们新对象的引用。
在这里,我们看到fr
是First
类的实例对象。
在类内部,我们可以定义属性和方法。 属性是对象的特征。 例如,这可以是雇员的工资。 方法定义了我们可以对对象执行的操作。 一种方法可以定义取消帐户。 从技术上讲,属性是变量,方法是在类内部定义的函数。
Python 对象初始化
称为__init__()
的特殊方法用于初始化对象。
object_initialization.py
我们有一个Being
类。 创建对象后立即自动调用特殊方法__init__()
。
Python 对象属性
属性是对象的特征。 在__init__()
方法中设置属性。
attributes.py
在此代码示例中,我们有一个Cat
类。 创建对象后立即自动调用特殊方法__init__()
。
类定义中的每个方法都以对实例对象的引用开头。 按照惯例,它的名称为self
。 self
名称没有什么特别的。 例如,我们可以这样命名。 第二个参数name
是自变量。 该值在类初始化期间传递。
在这里,我们将属性传递给实例对象。
在这里,我们创建两个对象:猫 Missy 和 Lucky。 参数的数量必须与类定义的__init__()
方法相对应。 “ Missy”和“ Lucky”字符串成为__init__()
方法的name
参数。
在这里,我们打印两个猫对象的属性。 一个类的每个实例可以有自己的属性。
可以动态分配属性,而不仅仅是在初始化过程中。 下一个示例对此进行了说明。
attributes_dynamic.py
我们定义并创建一个空的Person
类。
在这里,我们动态创建两个属性:age 和 name。
Python 类属性
到目前为止,我们一直在讨论实例属性。 在 Python 中,还有所谓的类对象属性。 类的所有实例的类对象属性都相同。
class_attribute.py
在我们的示例中,我们有两只具有特定name
和age
属性的猫。 两只猫都有一些共同之处。 小姐和幸运者都是哺乳动物。 这反映在类级别属性species
中。 该属性是在类主体中的任何方法名称之外定义的。
有两种方法可以访问类对象属性:通过Cat
类的名称,或借助特殊的__class__
属性。
Python 方法
方法是在类主体内定义的函数。 它们用于通过对象的属性执行操作。 在 OOP 范式的封装概念中,方法至关重要。 例如,我们的AccessDatabase
类中可能有一个connect()
方法。 我们无需知道方法连接如何准确地连接到数据库。 我们只知道它用于连接数据库。 这对于划分编程中的职责至关重要,尤其是在大型应用中。
methods.py
在代码示例中,我们有一个Circle
类。 我们定义了三种新方法。
area()
方法返回圆的面积。
setRadius()
方法为radius
属性设置新值。
getRadius()
方法返回当前半径。
在实例对象上调用该方法。 c
对象与类定义的self
参数配对。 数字 5 与radius
参数配对。
在 Python 中,我们可以通过两种方式调用方法。 有有界的和无界的方法调用。
bound_unbound_methods.py
在此示例中,我们演示了两个方法调用。
这是绑定的方法调用。 Python 解释器会自动将m
实例与 self 参数配对。
这是无界的方法调用。 实例对象已显式提供给getName()
方法。
Python 继承
继承是一种使用已经定义的类形成新类的方法。 新形成的类称为派生的类,我们从中衍生的类称为基类。 继承的重要好处是代码重用和降低程序的复杂性。 派生类(后代)将覆盖或扩展基类(祖先)的功能。
inheritance.py
在此示例中,我们有两个类:Animal
和Dog
。 Animal
是基类,Dog
是派生类。 派生类继承基类的功能。 通过eat()
方法显示。 派生的类修改了基类的现有行为,如whoAmI()
方法所示。 最后,派生类通过定义新的bark()
方法来扩展基类的功能。
我们将祖先类放在子孙类名称之后的圆括号中。 如果派生类提供了自己的__init__()
方法,并且我们想调用父构造函数,则必须借助super
函数显式调用基类__init__()
方法。
Python 多态性
多态性是对不同的数据输入以不同方式使用运算符或函数的过程。 实际上,多态性意味着如果类 B 从类 A 继承,则不必继承关于类 A 的所有内容; 它可以完成 A 类所做的某些事情。
basic_polymorphism.py
Python 在内置类型中广泛使用了多态。 在这里,我们对三种不同的数据类型使用相同的索引运算符。
多态性在处理继承时最常用。
polymorphism.py
在这里,我们有两种:狗和猫。 两者都是动物。 Dog
类和Cat
类继承了Animal
类。 它们具有talk()
方法,可以为它们提供不同的输出。
Python 特殊方法
Python 编程语言中的类可以使用特殊的方法名称来实现某些操作。 这些方法不是直接调用,而是通过特定的语言语法调用。 这类似于在 C++ 或 Ruby 中所谓的运算符重载。
special_methods.py
在我们的代码示例中,我们有一个 book 类。 在这里,我们介绍四种特殊方法:__init__()
,__str__()
,__len__()
和__del__()
。
在这里,我们称为__init__()
方法。 该方法创建 Book 类的新实例。
print 关键字调用__str__()
方法。 此方法应返回对象的非正式字符串表示形式。
len()
函数调用__len__()
方法。 就我们而言,我们打印书的页数。
del
关键字删除一个对象。 它调用其__del__()
方法。
在下一个示例中,我们实现一个向量类并演示对其的加法和减法运算。
vector.py
该示例介绍了__add__
和__sub__
方法。
在这里,我们实现向量的加法运算。 当我们使用+
运算符添加两个Vector
对象时,将调用__add__()
方法。 在这里,我们将各个向量的每个成员相加。