这是第二节基础知识课,第一节见:
Python自学–基础知识点汇总(1)
第一个问题,什么是 Python ?根据 Python 之父 Guido van Rossum 的话,Python 是:
一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法。
对于我来说,学习 Python 的首要原因是,Python 是一种可以优雅编程的语言。它能够简单自然地写出代码和实现我的想法。
另一个原因是我们可以将 Python 用在很多地方:数据科学、Web 开发和机器学习等都可以使用 Python 来开发。Quora、Pinterest 和 Spotify 都使用 Python 来进行他们的后端 Web 开发。那么让我们来学习一下 Python 吧。
类&对象
一些理论:
对象是对现实世界实体的表示,如汽车、狗或自行车。这些对象有两个共同的主要特征:数据和行为。
汽车有数据,如车轮的数量,车门的数量和座位的空间,并且它们可以表现出其行为:它们可以加速,停止,显示剩余多少燃料,以及许多其他的事情。
我们将数据看作是面向对象编程中的属性和行为。又表示为:
数据→ 属性和行为 → 方法
而类是创建单个对象的蓝图。在现实世界中,我们经常发现许多相同类型的对象。比如说汽车。所有的汽车都有相同的构造和模型(都有一个引擎,轮子,门等)。每辆车都是由同一套蓝图构造成的,并具有相同的组件。
Python 面向对象编程模式:ON
Python,作为一种面向对象编程语言,存在这样的概念:类和对象。
一个类是一个蓝图,是对象的模型。
那么,一个类是一个模型,或者是一种定义属性和行为的方法(正如我们在理论部分讨论的那样)。举例来说,一个车辆类有它自己的属性来定义这个对象是个什么样的车辆。一辆车的属性有轮子数量,能源类型,座位容量和最大时速这些。
考虑到这一点,让我们来看看 Python 的类的语法:
class Vehicle:
pass
上边的代码,我们使用 class 语句来定义一个类。是不是很容易?
对象是一个类的实例化,我们可以通过类名来进行实例化。
car = Vehicle()
print(car) # <__main__.Vehicle instance at 0x7fb1de6c2638>
在这里,car 是类 Vehicle 的对象(或者实例化)。
记得车辆类有四个属性:轮子的数量,油箱类型,座位容量和最大时速。当我们新建一个车辆对象时要设置所有的属性。所以在这里,我们定义一个类在它初始化的时候接受参数:
class Vehicle:
def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity):
self.number_of_wheels = number_of_wheels
self.type_of_tank = type_of_tank
self.seating_capacity = seating_capacity
self.maximum_velocity = maximum_velocity
这个 init 方法。我们称之为构造函数。因此当我们在创建一个车辆对象时,可以定义这些属性。想象一下,我们喜欢 Tesla Model S ,所以我们想创建一个这种类型的对象。它有四个轮子,使用电能源,五座并且最大时时速是250千米(155英里)。我们开始创建这样一个对象:
tesla_model_s = Vehicle(4, 'electric', 5, 250)
四轮+电能源+五座+最大时速250千米。
所有的属性已经设置了。但我们该如何访问这些属性值呢?我们给对象发送消息以向其请求该值。我们称之为方法。它是对象的行为。让我们实现它:
class Vehicle:
def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity):
self.number_of_wheels = number_of_wheels
self.type_of_tank = type_of_tank
self.seating_capacity = seating_capacity
self.maximum_velocity = maximum_velocity def number_of_wheels(self):
return self.number_of_wheels def set_number_of_wheels(self, number):
self.number_of_wheels = number
这是两个方法number_of_wheels和set_number_of_wheels的实现。我们将其称为getter & setter。因为第一个函数是获取属性值,第二个函数是给属性设置新的值。
在 Python 中,我们可以使用@property (修饰符)来定义getters和setters。让我们看看实际代码:
class Vehicle:
def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity):
self.number_of_wheels = number_of_wheels
self.type_of_tank = type_of_tank
self.seating_capacity = seating_capacity
self.maximum_velocity = maximum_velocity @property
def number_of_wheels(self):
return self.number_of_wheels @number_of_wheels.setter
def number_of_wheels(self, number):
self.number_of_wheels = number
并且我们可以将这些方法作为属性使用:
tesla_model_s = Vehicle(4, 'electric', 5, 250)
print(tesla_model_s.number_of_wheels) # 4tesla_model_s.number_of_wheels = 2 # setting number of wheels to 2print(tesla_model_s.number_of_wheels) # 2
这和方法定义有轻微的不同。这里的方法是按照属性执行的。例如当我们设置新的轮胎数目时,我们并不将这两个看做参数,而是将数值2设置给number_of_wheels。这是编写python风格的getter和setter代码的一种方式。
但我们也可以将该方法用于其他事项,例如“make_noise”方法。让我们看看:
class Vehicle:
def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity):
self.number_of_wheels = number_of_wheels
self.type_of_tank = type_of_tank
self.seating_capacity = seating_capacity
self.maximum_velocity = maximum_velocity def make_noise(self):
print('VRUUUUUUUM')
当我们调用此方法时,它仅仅返回一个字符串“VRRRRUUUUM.”
tesla_model_s = Vehicle(4, 'electric', 5, 250)
tesla_model_s.make_noise() # VRUUUUUUUM