python 子类调用父类的构造函数实例
作者:homle 发布时间:2023-05-27 22:33:37
当子类继承父类后,需要调用父类的方法和属性时,需要调用父类的初始化函数。
class A(object):
def __init__(self):
self.nameaa = 'aa'
def funca(self):
print('function a %s' % self.nameaa)
class B(A):
def __init__(self):
self.namebb = 'bb'
def funcb(self):
print('function b %s' % self.namebb)
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()
在子类中重写了构造函数,但新的构造函数没有初始化父类,当没有初始化父类的构造函数时,就会报错。
(1)调用超类的构造方法
class A(object):
def __init__(self):
self.nameaa = 'aa'
def funca(self):
print('function a %s' % self.nameaa)
class B(A):
def __init__(self):
self.namebb = 'bb'
A.__init__(self) #添加
def funcb(self):
print('function b %s' % self.namebb)
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()
(2)使用super函数
class A(object):
def __init__(self):
self.nameaa = 'aa'
def funca(self):
print('function a %s' % self.nameaa)
class B(A):
def __init__(self):
self.namebb = 'bb'
super(B,self).__init__()
def funcb(self):
print('function b %s' % self.namebb)
b = B()
print(b.namebb)
b.funcb()
print(b.nameaa)
b.funca()
super函数返回一个super对象,解析过程自动查找所有的父类和父类的父类,当前类和对象可以作为super函数的参数使用,调用函数返回的方法是超类的方法。使用super函数如果子类继承多个父类只许一次继承,使用一次super函数即可。
如果没有重写子类的构造函数,是可以直接使用父类的属性和方法的。
class A(object):
def __init__(self):
self.nameaa = 'aa'
def funca(self):
print('function a %s' % self.nameaa)
class C(A):
pass
c = C()
c.funca()
print(c.nameaa)
补充知识:python3 和python2 调用父类构造方法写法区别
1. python3 和python2 调用父类构造方法写法区别
前一段时间,把之前的一个项目迁移到python3
发现了很多不同的地方.我这里简单说明了,构造方法的不同 之后可能会继续更新不同. 主要针对项目迁移进行总结,反思. 这里就当做笔记.
python3 代码 调用父类的构造方法
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author: Frank
@contact: frank.chang@shoufuyou.com
@file: py2topy3.py
@time: 2018/7/7 上午7:09
## python3 代码
"""
import threading
import queue
_sentinel = object()
class Consumer(threading.Thread):
"""
消费者线程类
"""
def __init__(self, name, queue):
super().__init__(name=name)
self.queue = queue
def run(self):
while True:
values = self.queue.get(timeout=None)
if values is _sentinel:
self.queue.put(values)
break
##process values
##xxx
print('consume is consuming data {}'.format(values))
print("{} finished".format(self.getName()))
if __name__ == '__main__':
q = queue.Queue()
concumser = Consumer('consumer', q)
print(concumser)
2 python2.7 调用父类的构造方法
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
"""
@author: Frank
@contact: frank.chang@shoufuyou.com
@file: 3.py
@time: 2018/7/7 上午7:05
"""
import Queue
import threading
# 哨兵
_sentinel = object()
class Consumer(threading.Thread):
"""
消费者线程类
"""
def __init__(self, name, queue):
super(Consumer, self).__init__(name=name)
self.queue = queue
def run(self):
while True:
values = self.queue.get(timeout=None)
if values is _sentinel:
self.queue.put(values)
break
##process values
##xxx
print('consume is consuming data {}'.format(values))
print("{} finished".format(self.getName()))
if __name__ == '__main__':
q = Queue.Queue()
concumser = Consumer('consumer', q)
print(concumser)
区别
主要区别是 super 的变化,
python3 中直接 super().init() 中 super 不需要传递任何参数,直接可以调用父类的构造方法
python2 中 super(Consumer, self).init(), 需要传两个参数一个是类名, 一个是self. 这样比较麻烦,很容易混淆. 但是python3 这里处理的比较好了.
可以看下这个文档 https://docs.python.org/3/library/functions.html#super
顺便提一下, python2 和python3 中 quque 名称换了,python3 用的是小写 作为模块名称.
来源:https://www.cnblogs.com/homle/p/8724125.html
猜你喜欢
- 这篇文章主要介绍了python 数据生成excel导出(xlwt,wlsxwrite)代码实例,文中通过示例代码介绍的非常详细,对大家的学习
- 本文以实例形式展示了Python获取电脑硬件信息及状态的实现方法,是Python程序设计中很有实用价值的技巧。分享给大家供大家参考之用。具体
- 前言这篇文章算是论坛PyTorch Forums关于参数初始化和finetune的总结,也是我在写代码中用的算是“最佳实践”吧。最后希望大家
- 一、使用以下命令查看当前安装mysql情况,查找以前是否装有mysqlrpm -qa|grep -i mysql可以看到如下图的所示:显示之
- 这是Pyhon系列文章的第二篇,本文主要介绍如何运行Python程序以及安装PyCharm开发工具。干货满满,建议收藏,需要用到时常看看。
- 在MySQL中删除数据有两种方式:truncate(截短)属于粗暴型的清空delete属于精细化的删除删除操作如果你需要清空表里的所有数据,
- 第1章 ansible软件概念说明python语言是运维人员必会的语言,而ansible是一个基于Python开发的自动化运维工具 (sal
- Microsoft SQL server2000由一系列相互协作的组件构成。能满足最大的WEB站点和企业数据处理系统存储
- OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特
- 这个标题实在拗口,Javascript命名变量所遵循的规则1、第一个字符必须是字母、汉字字符、 下划线(_)或美元符号($)2、剩下的可以是
- 1. 复制表结构及其数据:create table table_name_new as select * from table_name_o
- 在制作网页的过程中,自适应问题是经常遇到,而又最让人头疼的,看了好多种解决的方法,但是都不是万能的。今天遇到这个问题,实在让我挠头,借鉴了
- DreamWeaver 4的到来让大家兴奋吧?但是大家一定为DreamWeaver4里面的字体、文字大
- 工作中遇到了要计算两个数百分比的问题,python 2.7 环境。代码:#!/usr/bin/env python#function: 计算
- 本文实例讲述了php文件上传类。分享给大家供大家参考,具体如下:/**$file=new class_file($file_array,&q
- 列表生成式语法:[x*x for x in range(0,10)] //列表生成式,这里是中括号//结果 [0, 1, 4, 9, 16,
- goroutine简介goroutine是go语言中最为NB的设计,也是其魅力所在,goroutine的本质是协程,是实现并行计算的核心。g
- php去掉数组的第一个值的两种删除方法:1、使用array_shift()函数删除数组的第一个值,语法“array_sh
- 显示有限的接口到外部当发布python第三方package时,并不希望代码中所有的函数或者class可以被外部import,在__init_
- 1、查看当前所有连接的详细资料:./mysqladmin -uadmin -p -h10.140.1.1 processlist2、只查看当