面向对象介绍¶
Python被成为是完全面向对象的编程语言,但不会强制你使用面向对象的编程方式,你也可以使用面向过程的方式,简单来说就是你可以把你想要做的事情按照流程一步一步的完成,整个计算过程可以理解成面向过程的编程。
那么什么是面向对象编程呢?面向对象编程(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针1。对象是把数据以及操作这些数据的函数聚合在一起,作为一种新的数据类型。其中的"数据"数据被称为属性,“操作这些数据的函数”成为方法。
类与对象¶
在面向对象编程中,最重要的两个概念就是类与对象。类(class)是某些事物共有特征的抽象,这里抽象包括对属性和方法的抽象。我们知道int,list, dict
这些是数据结构,是不同的数据类型,类也是一种数据类型。类的定义使用class
关键词,类里面可以定义属性和方法。先来看一个简单的例子.
class Circle:
def __init__(self, r: float):
self.r = r
self.pi = 3.14
def circumference(self):
"""周长"""
return 2 * self.pi * self.r
def area(self):
"""面积"""
return self.pi * self.r ** 2
print(Circle)
# <class '__main__.Circle'>
上面的程序定义了一个类Circle
,代码看不懂没有关系,我们先解释一下。__init__
方法用来定义初始化参数,我们定义了初始化参数是圆的半径,同时还定义圆周率的大小。这两个数据是属性。接下来还定义了两个方法,分别是计算周长和面积,就是方法。我们打印出这个类,可以看到第一个关键词是class
,说明这是一个类。
对象就是类的实例。是类创造出来的实际事物。比如上面我们定义圆类,这个圆是什么样子,不清楚吧,半径呢?只定义了半径这个属性,具体大小不得而知,这就是类,是对某类事物的抽象。接下来我们用这个类实例化几个对象出来。
c1 = Circle(r=1)
c5 = Circle(r=5)
# 输出两个实例的周长和面积
print(c1.circumference(), c1.area())
print(c5.circumference(), c5.area())
# 6.28 3.14
# 31.4 78.5
c1,c5
是类实例出的两个对象,它们是具体的事物,半径,周长和面积都是确定的。通过这个例子你应该明白了类与对象了吧。我们在上产零件的时候需要模子,类就是这个模子,而对象就是模子生产出的零件。理解了类和对象的概念以后,接下来再进一步介绍。
都是类¶
通过上面例子你应该理解了类与对象,现在来解释一下Python为什么是完全面向对象的语言。因为在Python中所有的数据类型都是类,包括int, float,list, dict, tuple
等等。怎么查看呢?用我们前面讲过的type
函数.
>>>type("123")
<class 'str'>
>>>type(10)
<class 'int'>
>>>type(True)
<class 'bool'>
>>>type([1,2,3])
<class 'list'>
class
,既然是类那就有属性或者方法。
>>>(10).__add__(12) # 10是一个类,有加法这个方法,于是加上12
22
>>>'abc'.upper() # 'abc'是一个类,下面有一个属性将字符串转为大写
'ABC'
整数是类,既然是类下面就有操作的方法,使用调用加法能正常返回结果。字符串也是也是类,调用将字符串转为大写的方法。可以通过dir
函数输出类的方法。
for each in dir(Circle):
print(each)
__class__
__delattr__
...
area
circumference
除了我们定义的两个方法以外,还有很多以双下划线__
开头的方法,这些方法是内置方法,以后会慢慢道来。
读者尝试
前面讲列表的时候我们讲了很多方法,尝试输出列表的所有方法。
总结¶
本节内容介绍了类和对象的基本概念,类是某些事物共有特征的抽象,而对象是类的实例是具有的事物。通过一些例子我们发现Python中基本的数据类型竟然都是类,解释了为什么说Python是完全面向对象的语言。之后还将继续介绍类与对象。