如何在Python 3中构造类和定义对象

介绍

Python是一种面向对象的编程语言。 面向对象编程 (OOP)专注于创建可重用的代码模式,与程序编程相反,程序编程专注于显式顺序指令。 当特别是在复杂程序上工作时,面向对象编程允许您重用代码和编写更易读的代码,这反过来使其更易于维护。

面向对象编程中最重要的概念之一是类和对象之间的区别,定义如下:

  • - 由程序员为对象创建的蓝图。 这定义了一组属性,这些属性将表征从该类实例化的任何对象。
  • Object - 类的实例。 这是类的实现版本,其中类显示在程序中。

这些用于创建模式(在类的情况下),然后使用模式(在对象的情况下)。

在本教程中,我们将介绍创建类,实例化对象,使用构造函数方法初始化属性,以及使用同一类的多个对象。

类就像一个蓝图或一个原型,你可以定义它来创建对象。

我们使用class关键字定义类,类似于我们通过使用def关键字定义函数

让我们定义一个名为Shark的类,它有两个与之相关的函数,一个用于游泳,一个用于表示真棒:

shark.py
class Shark:
    def swim(self):
        print("The shark is swimming.")

    def be_awesome(self):
        print("The shark is being awesome.")

因为这些函数在Shark类下缩进,所以它们被称为方法。 方法是在类中定义的一种特殊类型的函数。

这些函数的参数是单词self ,它是对基于这个类的对象的引用。 为了引用类的实例(或对象), self将始终是第一个参数,但它不一定是唯一的。

定义这个类不会创建任何Shark对象,只有Shark对象的模式,我们可以稍后定义。 也就是说,如果你在这个阶段运行上面的程序,什么都不会返回。

创建上面的Shark类为我们提供了一个对象的蓝图。

对象

对象是类的实例。 我们可以采取上面定义的Shark类,并使用它来创建一个对象或其实例。

我们将创建一个名为sammyShark对象:

sammy = Shark()

在这里,我们将对象sammy初始化为类的一个实例,设置它等于Shark()

现在,让我们使用Shark对象sammy的两个方法:

sammy = Shark()
sammy.swim()
sammy.be_awesome()

Shark对象sammy使用了两个方法swim()be_awesome() 我们使用点运算符( . )调用这些函数,用于引用对象的属性。 在这种情况下,属性是一个方法,它使用圆括号调用,就像你如何使用函数调用。

因为关键字selfShark类中定义的方法的参数,所以sammy对象被传递给方法。 self参数确保方法具有引用对象属性的方式。

然而,当我们调用这些方法时,括号内没有任何东西被传递,对象sammy会被自动传递给点运算符。

让我们在程序的上下文中添加对象:

shark.py
class Shark:
    def swim(self):
        print("The shark is swimming.")

    def be_awesome(self):
        print("The shark is being awesome.")


def main():
    sammy = Shark()
    sammy.swim()
    sammy.be_awesome()

if __name__ == "__main__":
    main()

让我们运行程序看看它做了什么:

python shark.py
OutputThe shark is swimming.
The shark is being awesome.

对象sammy调用程序的main()函数中的两个方法,使得这些方法运行。

构造函数方法

构造函数方法用于初始化数据。 一旦类的对象被实例化,它就运行。 也称为__init__方法,它将是类的第一个定义,如下所示:

class Shark:
    def __init__(self):
        print("This is the constructor method.")

如果你在上面的程序中添加了上面的__init__方法到Shark类,程序将输出以下内容,而不需要修改sammy实例化中的任何内容:

OutputThis is the constructor method.
The shark is swimming.
The shark is being awesome.

这是因为构造函数方法是自动初始化的。 你应该使用这个方法来执行任何初始化你想要做的类对象。

而不是使用上面的构造函数方法,让我们创建一个使用name变量,我们可以用来分配名称对象。 我们将传递name作为参数,并将self.name设置为name

shark.py
class Shark:
    def __init__(self, name):
        self.name = name

接下来,我们可以修改函数中的字符串来引用名称,如下所示:

shark.py
class Shark:
    def __init__(self, name):
        self.name = name

    def swim(self):
        # Reference the name
        print(self.name + " is swimming.")

    def be_awesome(self):
        # Reference the name
        print(self.name + " is being awesome.")

最后,我们可以通过将Shark对象sammy的名称作为Shark类的参数来设置为等于"Sammy"

shark.py
class Shark:
    def __init__(self, name):
        self.name = name

    def swim(self):
        print(self.name + " is swimming.")

    def be_awesome(self):
        print(self.name + " is being awesome.")


def main():
    # Set name of Shark object
    sammy = Shark("Sammy")
    sammy.swim()
    sammy.be_awesome()

if __name__ == "__main__":
    main()

我们现在可以运行该程序:

python shark.py
OutputSammy is swimming.
Sammy is being awesome.

我们看到我们传递给对象的名称正在打印出来。 我们使用参数名称(和self关键字)定义了__init__方法,并在方法中定义了一个变量。

因为构造函数方法是自动初始化的,我们不需要显式地调用它,只有当我们创建一个新的类的实例时,在类名后面的括号中传递参数。

如果我们想添加另一个参数,例如age ,我们也可以把它传递给__init__方法:

class Shark:
    def __init__(self, name, age):
        self.name = name
        self.age = age

然后,当我们创建对象sammy时,我们可以在我们的语句中传递Sammy的年龄:

sammy = Shark("Sammy", 5)

要使用age ,我们还需要在类中创建一个方法来调用它。

构造方法允许我们初始化对象的某些属性。

使用多个对象

类是有用的,因为它们允许我们基于相同的蓝图创建许多相似的对象。

要了解这是如何工作的,让我们添加另一个Shark对象到我们的程序:

shark.py
class Shark:
    def __init__(self, name):
        self.name = name

    def swim(self):
        print(self.name + " is swimming.")

    def be_awesome(self):
        print(self.name + " is being awesome.")

def main():
    sammy = Shark("Sammy")
    sammy.be_awesome()
    stevie = Shark("Stevie")
    stevie.swim()

if __name__ == "__main__":
  main()

我们创建了一个名为stevie的第二个Shark对象,并将名称"Stevie"传递给它。 在这个例子中,我们使用带有sammybe_awesome()方法和带有stevieswim()方法。

让我们运行程序:

python shark.py
OutputSammy is being awesome.
Stevie is swimming.

输出显示我们使用两个不同的对象, sammy对象和stevie对象,都是Shark类。

类使得可以按照相同的模式创建多个对象,而无需从头创建每个对象。

结论

本教程通过创建类,实例化对象,使用构造函数方法初始化属性,以及使用同一类的多个对象。

面向对象编程是一个重要的理解概念,因为它使代码循环更直接,因为为一个程序创建的对象可以在另一个程序中使用。 面向对象的程序还有助于更好的程序设计,因为复杂的程序很难写,需要仔细的规划,这反过来使得随着时间的推移维护程序的工作量减少。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏