Python带有许多内置数据类型,例如dict , list , set等。您是否想知道是否可以创建自己的数据类型? 像person , car , university等? 创建这样的数据类型是否可能? 是的,这在Python中当然是可能的,而这正是类和对象起作用的地方。

在本教程中,我将描述类和对象的含义,以及如何在Python中使用它们。

类和对象

如上所述,类和对象是关于创建自己的数据类型(即用户定义的数据类型)的。 因此, 类是用户定义的数据类型,创建类的实例(实例化)意味着创建该类型的对象 。 归根结底,类和对象被认为是Python的主要构建模块,Python是一种面向对象的编程语言。

在Python中创建类会是什么样? Python中最简单的类结构如下所示:

class ClassName:
    statements

如您所见,定义类以class关键字开头, className是类的名称(标识符)。 请记住,类名遵循与Python中变量名相同的规则,即名称只能以字母或下划线_开头,并且只能包含字母,数字。 或下划线。 另外,参考PEP 8 (Python代码样式指南),我们可以看到建议以CapWords(上部CamelCase)样式命名类。

现在让我们定义一个Person类,该类目前除了pass语句之外将不包含任何内容。 如Python文档中所述:

pass语句不执行任何操作。 在语法上需要语句但程序无需执行任何操作时可以使用它

class Person:
    pass

为了创建此类的实例(对象),我们可以简单地执行以下操作:

abder = Person()

这意味着我们创建了一个Person类型的新对象abder 。 请注意,创建对象只是在类名后加上括号。

我们可以通过键入abder内容来识别abder类型以及它在内存中的位置: print abder 。 在这种情况下,您将获得以下内容:

<__main__.Person instance at 0x109a1cb48>

属性

属性就像我们要添加到类(类型)的属性一样。 例如,对于我们的Person类,让我们添加两个属性: name和school ,如下所示:

class Person:
    name = ''
    school = ''

现在,我们可以创建一个具有更多详细信息的Person类型(Person实例)的新对象,因为它现在具有一些属性,如下所示:

abder = Person()
abder.name = 'Abder'
abder.school = 'ABC University'

方法

方法就像Python中的函数一样,因为它们是用关键字def定义的,并且格式与函数相同。 在我们的课堂上,让我们定义一个打印人的姓名和学校的方法。 该类如下所示:

class Person:
    name = ''
    school = ''
    
    def print_name(self):
        print self.name
        
    def print_school(self):
        print self.school
    
abder = Person()
abder.name = 'Abder'
abder.school = 'XY University'
abder.print_name()
abder.print_school()

我在上面提到过,方法就像函数。 但是主要的区别是方法需要有一个方便地命名为self的参数,该参数是指调用方法的对象(即abder)。 注意,在调用方法时,我们不需要将self作为参数传递,因为Python将为我们处理该参数。

如果我们不将self用作print_name()的参数,则Python会这样抱怨:

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    abder.print_name()
TypeError: print_name() takes no arguments (1 given)

您当然可以将多个参数传递给该方法。 让我们以一种方法进行打印name和school的过程,如下所示:

class Person:
    name = ''
    school = ''
    
    def print_information(self, name, school):
        print self.name
        print self.school
            
abder = Person()
abder.name = 'Abder'
abder.school = 'XY University'
abder.print_information(abder.name, abder.school)

尝试运行该程序-您是否获得了与以前相同的输出?

初始化

在上一节中,我们通过给它们一个空值' '初始化name和school 。 但是,还有一种更优雅的方法将变量初始化为默认值,这是初始化派上用场的地方。

初始化程序是一个名为__init__的特殊方法(该方法被认为是特殊方法,将在特殊情况下使用,这就是为什么在开头和结尾处都有双下划线的原因)。

让我们修改以前的程序以使用初始化程序。 在这种情况下,程序将如下所示:

class Person:
    def __init__(self, n, s):
        self.name = n
        self.school = s
    
    def print_name(self):
        print self.name
        
    def print_school(self):
        print self.school
    
abder = Person('Abder', 'XY University')

abder.print_name()
abder.print_school()

请注意,这里的初始化程序需要有两个参数。 例如,如果我们不将n参数包含在初始化器中,则会得到以下错误:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    abder = Person('Abder', 'XY University')
TypeError: __init__() takes exactly 2 arguments (3 given)

因此,最重要的是,使用类,您将能够创建自己的数据类型,使用对象,您将能够创建这些数据类型的实例。 类也由属性 (属性)和方法组成,这些是我们对这些属性执行的操作。

您一直想创建的数据类型是什么? 快去做!

翻译自: https://code.tutsplus.com/tutorials/a-smooth-refresher-on-pythons-classes-and-objects--cms-25598