zoukankan      html  css  js  c++  java
  • 《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)。对于对象而言,这意味着这个类提供的方法不应该依赖于属性的表示方法

  • 相关阅读:
    [FJOI2007]轮状病毒
    [SHOI2013]发微博
    ATCODER ABC 099
    [HEOI2015]兔子与樱花
    [TJOI2017]可乐
    [TJOI2015]线性代数
    [Ceoi2008]order
    [CTSC2008]祭祀river
    [POI2009]Lyz
    数列分块(数据结构)学习笔记
  • 原文地址:https://www.cnblogs.com/xugenpeng/p/9163159.html
Copyright © 2011-2022 走看看