面向对象的原则可以适用于大多数计算机语言,而不仅仅是 Python。Python不要求程序员在创建程序时使用对象或类,尽管Python中的一切本身就是一个对象。简单地创建单个函数、变量、数据结构等等是很常见的,只要语法正确,Python就会运行你的代码。然而,程序员利用OOP的一些原因是,保持一切有条不紊并确保你程序的一个部分不会在其他地方产生意想不到的副作用变得越来越困难了。使用面向对象的编程技术有助于组织和结构化程序,使它们更容易计划、维护和学习。OOP将数据和对这些数据进行操作的函数集中到一起。它还鼓励建立模块化的程序,这意味着程序的各个部分不需要知道其他部分是如何在内部工作的。在未来,如果程序的一部分需要更新或替换,它可以在对程序其他部分的代码干扰最小的情况下完成。
基本类的定义
class Monitor():
def __init__(self, model):
self.model = model
在 Python 中, class关键字用来定义一个新的类。这里我们创建了一个叫做Monitor 的类。你还会注意到第二行的 **__init__**函数的第二行。它需要两个参数 **self**和 model.在这个函数里面。 **model**被分配给 self.model.那么这里发生了什么?嗯,这个 **__init__**函数是 Python 用于处理类的特殊函数之一。它被用来用一些起始信息初始化一个新的对象,并在你在类上定义的任何其它函数之前被调用。它在性质上类似于你在 Java 或 C# 中发现的构造函数,但它并不完全相同。它是一个特别的初始化函数,因为当它被调用时,对象已经被构造出来了。
创建类的实例
monitor1 = Monitor("Samsung")
monitor2 = Monitor("Viewsonic")
现在我们可以从我们定义的监视器类中实例化几个对象。为了实例化一个对象,我们首先在赋值(=)运算符的左边设置一个变量。在运算符的右边 =操作符的右边,我们通过写它的名字来调用这个类,后面是圆括号。在圆括号内,我们需要传入一个模型,因为这个类希望有一个模型。有趣的是,__init__函数需要两个参数,但我们在这里创建每个实例时只传递一个参数。这是因为每当在一个 Python 对象上调用一个方法时,对象本身就会自动作为第一个参数传入。这有点像魔术,但这就是它的工作原理。在 Python 中,惯例是使用self关键字来实现。在其它语言中,这通常是指this关键字。
打印类和属性
在上面的章节中,程序中现在有两个变量。每个变量都持有一个 Monitor 类的实例。在 Python 中,要查看一个对象,你可以简单地使用 print() 函数,同时传入你想查看的对象。所以这里我们调用 print() 并传入 monitor1 变量。这个输出的结果是,它是一个位于给定地址的监视器对象。然后,我们打印出该对象的一个属性,或者说属性。回想一下,我们已经给这个类分配了一个模型属性。由于我们在初始化对象时传入了 "Samsung "字符串,这就是我们在打印该对象的属性时看到的东西。很好!
print(monitor1)
print(monitor1.model)
输出
<__main__.Monitor object at 0x01702E98>
Samsung
按照同样的过程,我们打印出第二个对象。我们再次看到,它是一个位于给定地址的Monitor对象。请注意,地址号与第一个对象不同。这表明每个对象都是它自己的实体。你可以从一个给定的类中创建一个或多个对象,它们对自己来说都是独一无二的。我们再次打印出这个对象的属性,看到这个Monitor实例的模型类型是Viewsonic,就像我们期望的那样。
print(monitor2)
print(monitor2.model)
输出
<__main__.Monitor object at 0x01042F28>
Viewsonic