自定义对象
1. 对象(python都有,你有没有)
多态
这大致意味着即便你不知道变量指向的是哪种对象,也能够对其执行操作,且操作的行为将随对象所属的类型(类)而异。
封装
封装(encapsulation)指的是向外部隐藏不必要的细节。
2. 类
每个对象都属于特定的类,并被称为该类的实例。例如,如果你在窗外看到一只鸟,这只鸟就是“鸟类”的一个实例。鸟类是一个非常通用(抽象)的类。
创建自定义类
被调用时会被第一个传入的参数就是self
class Person:
def set_name(self, name):
self.name = name
def get_name(self):
return self.name
def greet(self):
print("Hello, world! I'm {}.".format(self.name))
类的命名空间
下面两条语句大致等价:
def foo(x): return x * x
foo = lambda x: x * x
在 class 语句中定义的代码都是在一个特殊的命名空间(类的命名空间)内执行的,而类的所有成员都可访问这个命名空间。
继承
要确定一个类是否是另一个类的子类,可使用内置方法 issubclass 。
>>> issubclass(SPAMFilter, Filter)
True
>>> issubclass(Filter, SPAMFilter)
False
抽象基类
Python通过引入模块 abc 提供了官方解决方案。这个模块为所谓的抽象基类提供了支持。一般而言,抽象类是不能(至少是不应该)实例化的类,其职责是定义子类应实
现的一组抽象方法。下面是一个简单的示例:
from abc import ABC, abstractmethod
class Talker(ABC):
@abstractmethod #
def talk(self):
pass
形如 @this 的东西被称为装饰器,其用法将在第9章详细介绍。