Python 类

Jinku Hu 2023年1月30日 2018年3月5日
  1. 面向对象编程介绍
  2. Python 类和对象
  3. Python 类构造方法
  4. 删除类的属性
Python 类

我们将在本节中讨论 Python 面向对象编程(OOP)的基础知识,比如类、对象等。

Python 是一种面向对象的编程,换句话说,Python 中的所有的东西都是一个对象。

面向对象编程介绍

面向对象编程(OOP)的基础包括以下术语,以后我们会经常在学习和使用中提到

  1. 数据成员
  2. 方法
  3. 对象
  4. 构造函数
  5. 方法重载
  6. 运算符重载
  7. 继承
  8. 类实例和实例化

Python 类和对象

类可以被认为是对象的轮廓,而对象是数据成员和成员函数的集合。类包含可以使用该类的对象来访问的数据成员(变量)和成员函数(方法)。

新建一个类

可以使用 class 关键字以及后面加类的名字来新建一个类。语法如下,

class NameofClass:
    #data members of the class
    #member functions of the class

举例如下,

>>> class Waiter:
	name = "Andrew"
	def display():
		print('Waiter Class')	
>>> print(Waiter.display)
<function Waiter.display at 0x0359E270>
>>> print(Waiter.name)
Andrew

在上例中,新建了一个名叫 Waiter 的类,它包含了一个成员变量 name 以及一个成员方法 display()

新建一个类的对象实例

你可以通过下面的语句来新建一个类的对象示例,

obj = className()

举个例子,

>>> w = Waiter()
>>> print(w.name)
Andrew
>>> w.display()
Waiter Class

你可以看到,Waiter 类的对象实例可以通过点运算符 . 来访问类的成员(属性)。

类属性

除了数据成员和成员函数之外,类还有一些 Python 的内置属性。

  1. __dict__:包含类的命名空间的字典。
  2. __doc__:类的文档说明
  3. __name__:类的名称
  4. __module__: 定义类的所在模块
  5. __bases__: 包含基础类的元组

这些属性可以通过 . 来访问。

举例说明一下,

>>> class Waiter:
	"This is a waiter class"
	name="Andrew"
	def display():
		print("You are in waiter class")
>>> w = Waiter()

>>> print(w.__doc__)
This is a waiter class

>>> print(w.__dict__)
{}

>>> print(w.__module__)
__main__

Python 类构造方法

Python 类可以通过 __init__() 方法来进行构造,这个内置的方法是当对应类的对象被新建时被自动调用的特殊方法。构造方法基本上是用来初始化类的成员数据。

>>> class Waiter:
        def __init__(self, n):
            self.name=n
            self.age=20
        def display(self):
            print(self.name)

>>> w=Waiter('Rob')
>>> w.display()
Rob

上例中,self 参数会在构造方法定义以及其他类方法中使用。你可以这样来看待,当你调用 w.display() 方法时,它会被解释为 Waiter.display(w)

删除类的属性

你可以通过 del 来删除类对象实例中的属性。

>>> w=Waiter('Rob')
>>> w.__dict__
{'name': 'Rob', 'age': 20}
>>> del w.age
>>> w.__dict__
{'name': 'Rob'}
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn