#!/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. tcl之变量-数组array

  2. STM32串口——中断方式的一般配置方法

    #include "stm32f10x.h" /************************************************ 该程序讲解串口程序的一般配置方法: ...

  3. ubuntu下eclipse c++开发

    linux下eclipse运行C++程序出现Launch Failed. Binary Not Found.错误 在unbutu16.04上安装eclipse c++,运行一个hello world程 ...

  4. c++ 操作符优先级

    优先级 操作符 描述 例子 结合性 1 ()[]->.::++-- 调节优先级的括号操作符数组下标访问操作符通过指向对象的指针访问成员的操作符通过对象本身访问成员的操作符作用域操作符后置自增操作 ...

  5. HDU 5657 CA Loves Math 状压DP + 枚举

    题意: 给出\(A(2 \leq A \leq 11), n(0 \leq n \leq 10^9), k(1 \leq k \leq 10^9)\). 求区间\([1, A^n]\)中各个数字互不相 ...

  6. TCP/IP网络编程之套接字类型与协议设置

    套接字与协议 如果相隔很远的两人要进行通话,必须先决定对话方式.如果一方使用电话,另一方也必须使用电话,而不是书信.可以说,电话就是两人对话的协议.协议是对话中使用的通信规则,扩展到计算机领域可整理为 ...

  7. 学好java,做好工程师必读的15本书

    学好java,做好工程师必读的15本书   一.Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵 ...

  8. Careercup - Microsoft面试题 - 23123665

    2014-05-12 07:44 题目链接 原题: Given an array having unique integers, each lying within the range <x&l ...

  9. 【Combination Sum 】cpp

    题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C  ...

  10. ogre3D学习基础15 -- 创建BSP Scene Manager

    BSP(binary-space partitioning) Scene Manager(二叉空间分割)场景管理器比较适合用于室内场景. 第一,添加框架代码如下 #include "Exam ...