类介绍

类,用作定义特定对象的基本特征的模板。这是一个例子:

class Person(object):
     """A simple class."""                            # docstring
     species = "Homo Sapiens"                         # class attribute

     def __init__(self, name):                        # special method
         """This is the initializer. It's a special
         method (see below).
         """
         self.name = name                             # instance attribute

     def __str__(self):                               # special method
         """This method is run when Python tries 
         to cast the object to a string. Return 
         this string when using print(), etc.
         """
         return self.name

     def rename(self, renamed):                       # regular method
         """Reassign and print the name attribute."""
         self.name = renamed
         print("Now my name is {}".format(self.name))

在查看上面的示例时,有几点需要注意。

  1. 该类由属性 (数据)和方法 (函数)组成。
  2. 属性和方法简单地定义为正常变量和函数。
  3. 如相应的 docstring 中所述,__init__() 方法称为初始化程序。它等同于其他面向对象语言中的构造函数,并且是在创建新对象或类的新实例时首先运行的方法。
  4. 首先定义适用于整个类的属性,并将其称为类属性
  5. 适用于类(对象)的特定实例的属性称为实例属性。它们通常在 __init__() 中定义; 这不是必需的,但建议(因为在 __init__() 之外定义的属性在定义之前存在被访问的风险)。
  6. 包含在类定义中的每个方法都将有问题的对象作为其第一个参数传递。self 这个词用于这个参数(self 的用法实际上是按惯例使用的,因为词 self 在 Python 中没有固有含义,但这是 Python 最受尊敬的约定之一,你应该总是遵循它)。
  7. 那些习惯于用其他语言进行面向对象编程的人可能会对一些事情感到惊讶。一个是 Python 没有 private 元素的真实概念,所以默认情况下,所有内容都模仿 C++ / Java public 关键字的行为。有关详细信息,请参阅此页面上的私有类成员示例。
  8. 一些类的方法有以下形式:__functionname__(self, other_stuff)。所有这些方法都称为魔术方法,是 Python 中类的重要组成部分。例如,Python 中的运算符重载是使用魔术方法实现的。有关更多信息,请参阅相关文档

现在让我们举一些我们的 Person 类!

>>> # Instances
>>> kelly = Person("Kelly")
>>> joseph = Person("Joseph")
>>> john_doe = Person("John Doe")

我们目前有三个 Person 对象,kellyjosephjohn_doe

我们可以使用点运算符 . 从每个实例访问类的属性。再次注意类和实例属性之间的区别:

>>> # Attributes
>>> kelly.species
'Homo Sapiens'
>>> john_doe.species
'Homo Sapiens'
>>> joseph.species
'Homo Sapiens'
>>> kelly.name
'Kelly'
>>> joseph.name
'Joseph'

我们可以使用相同的点运算符 . 执行类的方法:

>>> # Methods
>>> john_doe.__str__()
'John Doe'
>>>  print(john_doe)
'John Doe'
>>>  john_doe.rename("John")
'Now my name is John'