Python
写接口API
......
Python
写接口API
......
看到类似 __slots__
这种形如 __xxx__
的变量或者函数名就要注意,这些在 Python 中是有特殊用途的。
__slots__
我们已经知道怎么用了,__len__()
方法我们也知道是为了能让 class 作用于 len()
函数。
除此之外,Python 的 class 中还有许多这样有特殊用途的函数,可以帮助我们定制类。
__str__
我们先定义一个 Student 类,打印一个实例:
在 OOP 程序设计中,当我们定义一个 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类 (Subclass) ,而被继承的 class 称为基类、父类或超类 (Base class、Super class) 。
比如,我们已经编写了一个名为 Animal 的 class,有一个 run()
方法可以直接打印:
class Animal(object):
def run(self):
print('Animal is running...')
当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢?
type()
首先,我们来判断对象类型,使用 type()
函数:
基本类型都可以用 type()
判断:
>>> type(123)
<class 'int'>
>>> type('str')
<class 'str'>
>>> type(None)
<type(None) 'NoneType'>
面向对象最重要的概念就是类 (Class) 和实例 (Instance) ,必须牢记类是抽象的模板,比如 Student
类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
面向对象编程——Object Oriented Programming,简称 OOP,是一种程序设计思想。OOP 把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
在 Python 中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类 (Class) 的概念。
在 Class 内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。
但是,从前面 Student 类的定义来看,外部代码还是可以自由地修改一个实例的 name
、score
属性:
>>> bart = Student('Bart Simpson', 59)
>>> bart.score
59
>>> bart.score = 99
>>> bart.score
99
type()
动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。
比方说我们要定义一个 Hello
的 class,就写一个 hello.py
模块:
class Hello(object):
def hello(self, name='world'):
print('Hello, %s.' % name)