#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2017/11/7 22:46
# @Author : lijunjiang
# @File : class2.py """
类的重写 在子类中,使用与父类中相同变量或方法名,可以重新定义父类中的属性和方法 """
class A():
def hello(self):
print('Hello, i am A')
class B(A):
pass
a = A()
b = B()
a.hello()
b.hello()
# 执行结果:
# Hello, i am A
# Hello, i am A
# 上例中可以看出class B 继承 class A 后具有了A 的方法hello() # 重写 hello 方法 class C(A):
def hello(self): # 重写hello()方法
print('Hello, I am class C')
c = C()
c.hello()
# 执行结果:Hello, I am class C
# 当在class C 中 重新定义与父类 class A 同名的方法hellp() 后,class C 的实例将不再调用class A 中定义的hello()方法而调用
# 自身定义的hello() 方法
# 即, 子类定义父类同名函数之后,父类函数被覆盖 # 重定__init__方法 class Person():
def __init__(self):
self.name = 'Person'
# print('Tist is a class Person') class Man(Person):
def __init__(self):
self.sex = 'M'
# print('I am class Man, my name is {0}'.format(name)) # person = Person()
# print(person.name)
# man = Man()
# print(man.name)
# print(man.sex)
# 执行结果:
# File "D:/Python/class/class2.py", line 54, in <module>
# Person
# print(man.name)
# AttributeError: Man instance has no attribute 'name' # 执行报错:子类Man 重写__init__构造函数后,没有从父类Person中继承其name属性
# 构造函数__init__,是每个类的默认方法,如上例在子类中重写了__init__方法后,其默认方法被重写,导致父类中的默认方法
# 无法被调用,失去其构造函数的作用
# 此时,如果在子类中重写__init__方法,且继承父类中的属性和方法时,可以使用方法 super()
# super(className, self).functionName([没有self] argv ) class Person():
def __init__(self):
self.name = 'Person'
# print('Tist is a class Person') class Gril(Person):
def __init__(self):
super(Gril, self).__init__()
self.sex = 'nvhai'
print('Class name is {0}'.format(self.sex)) gril = Gril()
print(gril.name) # 执行结果:
# File "D:/Python/class/class2.py", line 80, in <module>
# gril = Gril()
# File "D:/Python/class/class2.py", line 76, in __init__
# super(Gril, self).__init__()
# TypeError: super() argument 1 must be type, not classobj # 原因:定义父类的时候,一定要写继承object类,不然那就会有如下的报错信息:TypeError: super() argument 1 must be type, not classobj,增加parent(object)就可以轻松解决。 class Person(object): # 执行时需注释上面已声明过的Person类和Man 类
def __init__(self):
self.name = 'Person'
# print('Tist is a class Person') class Gril(Person):
def __init__(self):
super(Gril, self).__init__()
self.sex = 'nvhai'
print('Class name is {0}'.format(self.sex)) gril = Gril()
print(gril.name)
# 执行结果:
# Class name is nvhai
# Person
# 使用super(className,self).functionName(没有self!!)的重点是不需要提供父类,这意味着如果改变了类继承关系,只需要改变一行代码(class C(P)),此时寻找基类的事由super函数完成
# 但其继承的类中必须有一个继承超级类 object

Python 类的重写的更多相关文章

  1. python 基础 5.3 类的重写

    一. 类的重写 只需要重新定义类的属性(变量),就是累的重写了 示例:重新定义类grandson的 name属性   #/usr/bin/python #coding=utf-8 #@Time :20 ...

  2. Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?

    这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...

  3. Python类的特点 (1):构造函数与方法

    Python中,类的特点: #encoding:utf-8 class Parent(object): x=1 #x是Parent类的属性(字段) def __init__(self): print ...

  4. 再学python类(终结篇)

    续写 初学python类,这几天吃坏东西了,拖着虚弱的身躯写的.有些乱请各位看官海涵. 声明:本人编程新手,还在学习中.所表述的东西都是基础语法之类的,分享我的学习笔记.还望多多指点,我一定虚心接受. ...

  5. 【Python&数据结构】 抽象数据类型 Python类机制和异常

    这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Pyt ...

  6. python 类知识点总结

    python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...

  7. 细说python类2——类动态添加方法和slots(转)

    先说一下类添加属性方法和实例添加属性和方法的区别, 类添加属性属于加了一个以类为全局的属性(据说叫静态属性),那么以后类的每一个实例化,都具有这个属性.给类加一个方法也如此,以后类的每一个实例化都具备 ...

  8. python类的相关知识第二部分

    类的继承.多态.封装 一.类的继承 1.应用场景: 类大部分功能相同,大类包含小类的情况 例如: 动物类 共性:都要吃喝拉撒.都有头有脚 特性: 猫类.走了很轻,叫声特别,喜欢白天睡觉 狗类.的叫声很 ...

  9. 学习python类

    类:Python 类提供了面向对象编程的所有基本特征: 允许多继承的类继承机制, 派生类可以重写它父类的任何方法, 一个方法可以调用父类中重名的方法. 对象可以包含任意数量和类型的数据成员. 作为模块 ...

随机推荐

  1. OpenFaceswap 入门教程(1):软件安装篇

    ---恢复内容开始--- 众多换脸软件中,DeepFaceLab其实是安装和使用最方便,更新最快的,但是由于其没有可是化界面,对于很新手来说,可能入门还是有点难度.那么今天就来介绍一款操作极其直观和简 ...

  2. 动态拼接SQL语句

    1.参考官方文档 ? if:字符判断 ? choose (when, otherwise):分支选择 ? trim (where, set):字符串截取:其中where标签封装查询条件,set标签封装 ...

  3. golang echo livereload

    echo on port 1323 gin -a 1323 run server.go go get github.com/codegangsta/gin gin -h

  4. Django 四——ModelForm用法

    内容概要: 1.新增数据库表中数据 2.更新数据库表中数据 Django的ModelForm Django中内置了Form和Model两个类,有时候页面的表单form类与Model类是一一对应,因此分 ...

  5. loj2074 「JSOI2016」灯塔

    loj 题面错的--去bzoj上看吧qwq 观察到 \(\sqrt{|i-j|}\) 的取值只有 \(\sqrt{n}\) 级别个,然后就很显然了,rmq. #include <iostream ...

  6. 微信公众开发api接口

      简介 微信公众平台消息接口为开发者提供了一种新的消息处理方式.微信公众平台消息接口为开发者提供与用户进行消息交互的能力.对于成功接入消息接口的微信公众账号,当用户发消息给公众号,微信公众平台服务器 ...

  7. Shell脚本编程

    1.linux中的变量 linux中的变量分为环境变量和普通变量,其中环境变量可以理解为全局变量,在所有shell的子程序中都可以引用,普通变量只能在自己的shell程序中使用,程序结束后变量无法保留 ...

  8. 用户注册,登录API 接口

    Controer: <?php /** * @name UserController * @author pangee * @desc 用户控制器 */ class UserController ...

  9. 聊聊、RabbitMQ 第一篇

    (一)windows 下安装配置 开源的消息中间件有很多,各有各的优缺点,适合自己项目的才是最好的.首先下载 rabbitMQ 安装版本,因为 rabbitMQ 底层语言是 erlang,所以首先要先 ...

  10. 贪吃蛇—C—基于easyx图形库(下):从画图程序到贪吃蛇【自带穿墙术】

    上节我们用方向控制函数写了个小画图程序,它虽然简单好玩,但我们不应该止步于此.革命尚未成功,同志还需努力. 开始撸代码之前,我们先理清一下思路.和前面画图程序不同,贪吃蛇可以有很多节,可以用一个足够大 ...