《Think Python》第17章学习笔记

《Think Python》第17章学习笔记

17.1 面向对象的特性(Object-oriented features)

Python 是一门面向对象的语言(object-oriented programming language),提供支持面向对象编程的特性。面向对象编程语言有以下的特性:

  • 程序包含类和方法的定义
  • 大部分的计算表示为对象上的操作
  • 对象通常表示真实世界中的物体,而方法则对应于真实世界中的物体交互的方式

17.2 打印对象(Printing objects)

调用方法的对象称为主语(subject)。通常,方法的第一个参数是 self

17.3 另一个例子(Another example)

17.4 一个更复杂的例子(A more complicated example)

17.5 __init__ 方法(The __init__ method)

在 Python 中,__init__ 方法相当于 C++ 或者 Java 中的构造函数,当创建一个对象时会自动调用。

17.6 __str__ 方法(The __str__ 方法)

__init__ 方法一样,__str__ 也是一个特殊的方法,用于返回对象的字符串表示,跟 Java 中的 toString 方法有异曲同工之妙。

17.7 运算符重载(Operator overloading)⭐️⭐️⭐

在自定义的类中,通过定义一些特殊的方法,可以指定一些运算符的行为。比如,如果你为 Time 类对象定义了 __add__ 方法,那么就可以在 Time 类对象上执行 + 操作。

改变一个运算符的行为,使得它可以作用在自定义类型上,这样的方式称为运算符重载(operator overloading)。对于 Python 中的每一个运算符,都有一个对应的特殊方法,像 + 运算符对应于 __add__ 方法。

17.8 类型分发(Type-based dispatch)

根据传入参数(实参)的类型选择相应的操作的方式称为类型分发(type-based dispatch)

17.9 多态(Polymorphism)

适用于多种类型的函数称为多态函数(polymorphic function)。多态有利于代码的重用。比如,内建函数 sum ,只要序列中的元素支持加法,它就能够计算一个序列中所有元素的和。

17.10 调试(Debugging)

如果想要查看一个对象是否包含特定的属性(attribute),一种方法是使用内建函数 hasattr ,另一种方式是使用内建函数 varsvars 的输入是一个对象,输出是 Python 的 字典类型。

>>> p = Point(3, 4)
>>> vars(p)
{'y': 4, 'x': 3}

下面这个函数对于调试是非常有帮助的:

def print_attributes(obj):
    for attr in vars(obj):
        print(attr, getattr(obj, attr))

17.11 接口和实现(Interface and implementation)

面向对象设计的目标之一就是使得软件更加容易维护,这意味着当系统的其他部分改变的时候,你的程序仍然适用,而且能够通过改变程序来满足新的要求。

实现这一目标的一个设计原则就是让接口和实现分离(to keep interfaces separate from implementations)。对于对象而言,这意味着这个类提供的方法不应该依赖于属性的表示方法

原文地址:https://www.cnblogs.com/xugenpeng/p/9163159.html