Python 类
我们将在本节中讨论 Python 面向对象编程(OOP)的基础知识,比如类、对象等。
Python 是一种面向对象的编程,换句话说,Python 中的所有的东西都是一个对象。
面向对象编程介绍
面向对象编程(OOP)的基础包括以下术语,以后我们会经常在学习和使用中提到
- 类
- 数据成员
- 方法
- 对象
- 构造函数
- 方法重载
- 运算符重载
- 继承
- 类实例和实例化
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 的内置属性。
__dict__
:包含类的命名空间的字典。__doc__
:类的文档说明__name__
:类的名称__module__
: 定义类的所在模块__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'}
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