目录

  • 单元1  初识Python
    • ● 任务 1.1  计算机程序设计语言概述
    • ● 任务 1.2 Python语言
    • ● 任务1.3 Python开发环境搭建
    • ● 任务 1.4 Python的简单使用
    • ● 知识拓展
    • ● 思考与练习
  • 单元2   Python基础知识
    • ● 任务2.1 Python程序基本结构
    • ● 任务2.2  标准输入输出
    • ● 任务2.3  Python对象
    • ● 任务2.4 Python变量
    • ● 任务2.5  数据类型
    • ● 任务2.6 字符串
    • ● 任务2.7 运算符
    • ● 知识拓展
    • ● 思考与练习
  • 单元3   程序流程控制
    • ● 任务3.1  顺序结构
    • ● 任务3.2 选择结构
    • ● 任务3.3  循环结构
    • ● 知识拓展
    • ● 思考与练习
  • 单元4  Python序列
    • ● 任务4.1  序列
    • ● 任务4.2 列表
    • ● 任务4.3  用于序列操作的常用内置函数
    • ● 任务4.4   元组
    • ● 任务4.5  字典
    • ● 任务4.6  集合
    • ● 知识拓展
    • ● 思考与练习
  • 单元5  函数
    • ● 任务5.1 函数的定义与调用
    • ● 任务5.2 函数的参数
    • ● 任务5.3   参数类型
    • ● 任务5.4  变量作用域
    • ● 任务5.5   嵌套调用与递归调用
    • ● 任务5.6  lambda表达式
    • ● 任务5.7  模块
    • ● 知识拓展
    • ● 思考与练习
  • 单元6  异常处理
    • ● 任务6.1 异常处理的基本概念
    • ● 任务6.2 Python的异常处理语句
    • ● 任务6.3  自定义异常
    • ● 知识扩展
    • ● 思考与练习
  • 单元7  文件操作
    • ● 任务7.1  文件的分类
    • ● 任务7.2  文件对象
    • ● 任务7.3  文本文件
    • ● 任务7.4  二进制文件
    • ● 知识拓展
    • ● 思考与练习
  • 单元8  面向对象程序设计
    • ● 任务8.1 面向对象技术的基本概念
    • ● 任务8.2 类与对象
    • ● 任务8.3 类的继承
    • ● 任务8.4 方法重写
    • ● 知识扩展
    • ● 思考与练习
  • 单元9  网络编程基础
    • ● 任务9.1  Socket概述
    • ● 任务9.2   Socket对象内建方法
    • ● 任务9.3  Socket编程实例
    • ● 任务9.4    PythonInternet模块
    • ● 知识扩展
    • ● 思考与练习
  • 单元10    Python标准库及第三方库
    • ● 任务10.1 Python标准库
    • ● 任务10.2 Python第三方库的下载及安装
    • ● 任务10.3  Python第三方库举例
    • ● 知识扩展
    • ● 思考与练习
  • 任务11 用户图形界面(GUI)
    • ● 任务11.1 图形用户界面概述
    • ● 任务11.2 窗体容器和组件
    • ● 任务11.3 界面布局管理
    • ● 任务11.4 文本框组件
    • ● 任务11.5 其他组件
    • ● 任务11.6菜单与对话框
    • ● 任务11.7 鼠标键盘事件
    • ● 知识扩展
    • ● 思考与练习
  • 任务12   Python操作数据库
    • ● 数据库基础
    • ● 结构化查询语言SQL
    • ● Python操作数据库核心API
    • ● Python操作数据库案例
    • ● sqlite3 实训练习案例
    • ● pymysql 数据库实训案例
    • ● 小结  思考与练习
  • 习题解析(线上作业等参考解答)
    • ● 第一单元 初识Python  作业
    • ● 第二单元  Python基础(作业)
    • ● 第三单元  程序流程控制 作业(1)
    • ● 第三单元  程序流程控制  作业(2)
    • ● 第四单元  Python序列   作业
    • ● 第五单元   函数   作业
    • ● 单元六  异常处理  作业
    • ● 单元七、八  文件操作,GUI,面向对象
    • ● 单元九   网络编程基础
    • ● 线上习题解析
    • ● 编程训练
  • 应用题解(综合编程技术)
    • ● 《食品识别小专家》
    • ● 格式输出
    • ● 习题选解
    • ● 每日一帖
    • ● 模拟基本信息
    • ● 模拟基本数据
    • ● 数制转换
    • ● 定制每日运动计划
    • ● 《简易购物系统》
  • 课程章节测验
    • ● 第1次章节测验
  • 复习
    • ● Python基础知识总结
  • 第三方库TOOLS(备用)
    • ● 库模块(可下载)
    • ● 供考查备用的库模块(可下载)
任务8.4 方法重写

(一)重写(overriding)

重写:子类改写父类的方法,从而部分地改变父类的行为

包括运算符、构造器在内的方法都可以被重写

重写父类方法的时候,父类方法中定义的操作不会被自动调用

1、子类定义举例和重写

# Filename: Prog8-10.py

class Dog(object):

    "define Dog class"

    counter = 0

    def __init__(self, name):

        self.name = name

        Dog.counter += 1

    def greet(self):

        print("Hi, I am  {:s}, my number is {:d}.".format(self.name, Dog.counter))

class BarkingDog (Dog):

    "define subclass BarkingDog"

    def greet(self):

        "initial subclass"

         print("Woof! I am {:s}, my number is {:d}.".format(self.name, Dog.counter))

if __name__ == '__main__':

    dog = BarkingDog("Zoe")

    dog.greet() 

(二)重定义(redefine)

子类重写父类方法时,要求参数保持一致,若要修改参数并改变功能,则称为重定义

(1)子类__init__()方法重定义

# Filename: Prog8-11.py

class Dog(object):

    …    # 同 Prog8-10.py

class BarkingDog (Dog):

    "define subclass BarkingDog“

    def __init__(self, name, color):

        super().__init__(name)

        self.color = color

def greet(self):

        "initial subclass"

         print(Woof! I am {:s} {:s}, my number is {:d}.".format(self.color, self.name, Dog.counter))

if __name__ == '__main__':

    dog = BarkingDog("Zoe", "black")

    dog.greet() 

(2)子类中使用父类__init__方法

def __init__(self, 父类参数, 子类参数):

super().__init__(父类参数)   #   或使用 父类. __init__(父类参数) 

其他函数代码块

(三)*重载(overloading)

重载指的是有相同的方法名但参数列表不同,根据参数类型和个数选择方法,一般在同一个类中实现,Python由于是动态语言且有可变长参数等特殊类型的参数,因此不显式支持普通的函数重载,但可以进行运算符重载。

*运算符重载

运算符

关联方法

+

C.__*add__(self, obj) 

-

C.__*sub__(self, obj)

*

C.__*mul__(self, obj)

/

C.__*div__(self, obj)

%

C.__*mod__(self, obj)

//

C.__*floordiv__(self, obj)

**

C.__*pow__(self, obj[,mod])

(四)访问控制

默认情况下,Python 类的成员属性与方法都是公共的

提供“访问控制符”来限定成员函数的访问

  __   #(双下划线)

限定属性和方法在类内部可见,防止父类与子类中的同名冲突   

>>> class P:

               def __init__(self, name):

                       self.__name = name


>>> x = P('John')

>>> x.__name

Traceback (most recent call last):

  File "<pyshell#0>", line 1, in <module>

    x.__name

AttributeError: 'P' object has no attribute '__name'

例:

#pro0607.py

class testc:

    def __init__(self):

        print('类testc加载成功!')

    def __del__(self):

        print('类testc删除成功!')

    def fu(self):

        print('方法fu调用成功!')

tc=testc()

tc.fu()

del tc

---------------------------------------

#pro0608.py

class testc(object):

    def __init__(self, value='Happy You!'):

        self.data=value

t=testc()

print(t)   #__main__.testc object at 0x00000258A86F7EF0>

print(t)   #__main__.testc object at 0x00000258A86F7EF0>

class testrepr(testc):

    def __repr__(self):

        return 'New Format(%s)' % self.data

tr=testrepr()

print(tr)

class teststr(testc):

    def __str__(self):

        return 'New String: %s' % self.data

ts=teststr()

print(ts)  #__main__.teststr object at 0x00000258A87099E8>

print(ts)