- JavaScript98
- 小程序67
- Python49
- Linux48
- TypeScript28
- CSS26
- 基础20
- HTML20
- Git19
- VS Code19
- GitHub14
- Markdown12
- 软件11
- jQuery9
- Android7
- Node.js7
- Vue6
- 快速上手5
- dart5
- 工具分享4
- 前端3
- Emmet3
- 硬件2
- 服务器2
- 教程2
- 后端1
- 运维工具1
- Cpp1
- C1
- Java1
- JSON1
- PHP1
- YAML1
看到类似 __slots__ 这种形如 __xxx__ 的变量或者函数名就要注意,这些在 Python 中是有特殊用途的。
__slots__ 我们已经知道怎么用了,__len__() 方法我们也知道是为了能让 class 作用于 len() 函数。
在 OOP 程序设计中,当我们定义一个 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类 (Subclass) ,而被继承的 class 称为基类、父类或超类 (Base class、Super class) 。
比如,我们已经编写了一个名为 Animal 的 class,有一个 run() 方法可以直接打印:
当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢?
使用 type()
首先,我们来判断对象类型,使用 type() 函数:
基本类型都可以用 type() 判断:
面向对象最重要的概念就是类 (Class) 和实例 (Instance) ,必须牢记类是抽象的模板,比如 Student 类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
面向对象编程——Object Oriented Programming,简称 OOP,是一种程序设计思想。OOP 把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。
面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
私有属性
在 Class 内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。
但是,从前面 Student 类的定义来看,外部代码还是可以自由地修改一个实例的 name、score 属性:
type()
动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。
比方说我们要定义一个 Hello 的 class,就写一个 hello.py 模块:
class Hello(object):
def hello(self, name='world'):
print('Hello, %s.' % name)
