跳转至

面向对象介绍

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是完全面向对象的语言。之后还将继续介绍类与对象。

参考

评论