python 类继承 父类初始化_python之子类继承父类时进行初始化的一些问题

直接看代码:

classPerson:def __init__(self):

self.name= "jack"

classStudent(Person):def __init__(self):

self.school= "一中"stu=Student()print("学生的姓名是:",stu.name)

此时,程序是不能正常运行的,运行之后报错:

这是为什么呢?

__init__相当于是python类的构造方法,在类进行实例化时被调用,当子类和父类中都存在构造方法时,子类中需要显示调用父类的构造方法 。需要注意的是python中构造方法是不能进行重载的,当有多个构造方法存在时,会默认调用最后一个构造方法。修改后的代码如下:

classPerson:def __init__(self):

self.name= "jack"

classStudent(Person):def __init__(self):

super(Student, self).__init__()

self.school= "一中"stu=Student()print("学生的姓名是:",stu.name)

此时的结果就是正常的。

super(Student, self).__init__():其中super关键字表示父类,Student是本类的名称,self指代本类自己。

在python中如何设置私有属性和方法?

将属性和方法前面加上__(双下划线)。加上了私有的属性和方法不能在类外进行访问,同时,子类继承父类的属性和方法时,在子类中也不能够访问父类的私有属性和方法。

举个例子:

classPerson:def __init__(self):

self.__name = "jack"

def __test(self):print("这是父类的私有方法")classStudent(Person):def __init__(self):

super(Student, self).__init__()

super().__test()

self.school= "一中"stu=Student()

以上代码会报错:

要想访问到父类的私有属性和方法,需这样做:

classPerson:def __init__(self):

self.__name = "jack"self.age= 12

def __test(self):print("这是父类的私有方法")deftest(self):print("这是父类的公有方法")classStudent(Person):def __init__(self):

super(Student, self).__init__()

self.school= "一中"

defprintStudent(self):#子类自己继承了父类的公有属性,直接访问即可

print("在子类中使用父类的共有属性:",self.age)#super()代表父类,可以访问父类的公有方法

#当然如若子类没有重写父类的方法,也可以使用self.test()来调用

#super和self区别:super是指代父类,self指代该类本身

super().test()#对于父类的私有属性和方法,需要通过_父类名__属性或方法名来访问

#super()._Person__test()

self._Person__test()

stu=Student()print("学生的姓名是:",stu._Person__name)print("学生的年龄是:",stu.age)

stu._Person__test()

stu.printStudent()

输出:

需要明确的是python中并没有真正意义上的私有修饰符,从以上的代码也可以看出。Python在运行时会将__属性或方法转换成:_类名__属性或方法。通过这种方式就可以访问到类私有属性或方法。还有一种方式就是通过在类内部再定义一个公有方法,来调用私有的属性或方法,在子类进行调用时调用这个公有的方法即可,这也就是面向对象中封装的作用之一,在接下来会结合进行介绍。

那么假设父类的构造器带有参数,那么在子类中应该如何进行初始化呢?

子类要在初始化的时候显示调用父类的有参构造,并且传入相应的参数,具体代码如下:

classPerson:def __init__(self,name,age):

self.name=name

self.__age =agedef __test(self):print("这是父类的私有方法")deftest(self):

self.__test()print("这是父类的公有方法")defsetAge(self,age):

self.__age =agedefgetAge(self):return self.__age

classStudent(Person):def __init__(self,school,name,age):

super(Student, self).__init__(name=name,age=age)

self.school=schooldefstuTest(self):

super().test()print("所在学校为:",self.school)

stu= Student("一中","tom",12)

stu.stuTest()print("学生的姓名是:",stu.name)print("学生的年龄是:",stu.getAge())

输出:

补充:

假设父类中没有显示的定义构造函数,那么在子类中就不用显示的定义父类的构造函数。

classPerson:deftest(self):print("什么都没有")classStudent:def __init__(self,name):

self.name=name

stu= Student("tom")print("姓名是:",stu.name)

输出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『WPF』实现拖动文件到窗体(控件)

前言 实现从窗口外部拖文件到窗口内部并自动捕获文件地址。 第一步 开启属性 启用底层Window的AllowDrop属性,添加Drop事件。 Drop事件:当你拖动文件到对应控件后,松开触发。 除Drop事件外,我们还可以使用DragEnter、DragOver、Dr…

怎么更改苹果账户名称_番茄todo小组件背景怎么改 苹果番茄todo小组件背景更改方法介绍...

番茄todo小组件背景怎么改,这也是大家会用到的一款倒计时APP,那么用户们应该怎么更改小组件的背景图片呢,可能还有些人不知道更改的方法。所以这里就为大家带来了具体的步骤!番茄todo小组件背景怎么改1.在打开APP后,如没有待办事项…

LeetCode 1786. 从第一个节点出发到最后一个节点的受限路径数(迪杰斯特拉 + 拓扑排序)

文章目录1. 题目2. 解题1. 题目 现有一个加权无向连通图。 给你一个正整数 n ,表示图中有 n 个节点,并按从 1 到 n 给节点编号;另给你一个数组 edges ,其中每个 edges[i] [ui, vi, weighti] 表示存在一条位于节点 ui 和 vi 之间…

java选择题多选题系统小程序_单选题与多选题判断得分(自动考试小程序,入门级)...

【单选题与多选题判断得分】【核心代码】using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace 自动…

用python开启相机_如何用Python打开realsenseD435相机并获取相机参数

如何用Python打开realsenseD435相机import pyrealsense2 as rsimport numpy as npimport cv2if __name__ "__main__":# Configure depth and color streamspipeline rs.pipeline()config rs.config()config.enable_device_from_file("666.bag")#这是打开…

Sicily-1063

一.题意 一个员工是另外一个员工的老板必须满足的条件是作为老板的员工的薪水salary必须大于这个员工,而且作为老板的员工的身高height要大于等于这个员工。首先按照薪水的多少从小到大进行排序,然后找每一个员工的直属老板。注意老板的下属的…

流畅的Python 1. Python数据模型(特殊方法 __func__())

文章目录1. __getitem__()、__len__() 方法2. 特殊方法1. __getitem__()、__len__() 方法 举一个扑克牌的例子 import collectionsCard collections.namedtuple(Card_name, [rank, suit]) print(Card.__doc__) # Card_name(rank, suit)class FrenchDeck:ranks [str(n) for …

diskfileitemfactory 需要的包_浅析电动汽车电池包低压线束设计及制造

点击上方右侧“EDC电驱未来”可订阅哦!般的电池包低压线束承载着模组通信、模组采样和电池管理等功能。电池包低压线束一般分为模组通信线束、模组采样线束、BMS线束等。这里结合实际工作中的经历和遇到的困扰,主要分析和探讨SUV纯电动汽车电池包低压线束…

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)[顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成…

xgboost实例_XGBoost超详细推导,终于有人讲明白了!

- XGB中树结点分裂的依据是什么?- 如何计算树节点的权值?- 为防止过拟合,XGB做了哪些改进?相信看到这篇文章的各位对XGBoost都不陌生,的确,XGBoost不仅是各大数据科学比赛的必杀武器,在实际工作…

修改dts后重编译_「正点原子FPGA连载」第二十章另一种方式编译ZYNQ镜像

1)摘自【正点原子】领航者 ZYNQ 之linux驱动开发指南2)实验平台:正点原子领航者ZYNQ开发板3)平台购买地址:https://item.taobao.com/item.htm?&id6061601087614)全套实验源码手册视频下载:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.ht…

流畅的Python 2. 数据结构 - 序列构成的数组

文章目录1. 内置序列2. 列表推导 []、生成器() 表达式3. 元组 tuple4. 切片5. , * 操作6. 增量赋值7. 排序8. bisect管理已排序序列8.1 用 bisect.bisect 二分搜索8.2 用 bisect.insort 二分插入新元素9. 列表的替代9.1 数组9.2 内存视图9.3 NumPy、SciPy9.4 队列1. 内置序列 …

python1到n的所有排列_非递归输出1-N的全排列的方法详解

下面小编就为大家带来一篇非递归的输出1-N的全排列实例(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧网易游戏笔试题算法题之一,可以用C,Java,Python,由于Python代码量较小,于…

动态规划算法实验报告_强化学习之动态规划算法

如今的强化学习研究大体分为了两个研究学派:一个是以Sutton,Sliver等人为代表的value-based学派,他们主要从值函数近似角度入手去研究强化学习,这也是强化学习早期最初发展起来时沿用的路线;第二个是以伯克利Sergey Le…

C语言中的字节对齐以及其相关处理

首先,我们来了解下一些基本原理: 一、什么是字节对齐一个基本类型的变量在内存中占用n个字节,则该变量的起始地址必须能够被n整除,即: 存放起始地址 % n 0,那么,就成该变量是字节对齐的;对于结构体、联合体而言,这个n取其所有基本类型的成员中占用空间字…

python3.7.1使用_在不影响使用python3.7.1的功能的情况下,是否可以从python代码中删除所有的ufuture_uu语句?...

您可以在不影响功能的情况下删除那些__future__导入,但是删除它们不是必需的,并且会停止与早期python版本的兼容性。在此外,正如deceze在评论中所暗示的那样,其他进口商品可能有所不同。例如,from __future__ import a…

hadoop 多机全分布式安装步骤(虚拟机1master+2slave)

文章目录1. 虚拟机安装Centos72. 配置静态IP3. 更改主机名4. 编辑域名映射5. 安装配置Java6. 配置SSH免密登录7 .安装Hadoop8. 关闭防火墙9. 格式化文件系统10. 启动验证11. 第一个MapReduce程序: WordCount12. 关闭Hadoop参考书:《Hadoop大数据原理与应用》1. 虚拟…

ie浏览器模拟器_航空飞机模拟器安卓版下载-航空飞机模拟器游戏下载

3D建模射击,真实的飞行世界,在航空飞机模拟器游戏中玩家将化身为飞行员,这里的飞机类型非常齐全,每一辆都要熟练操作,最大程度还原了飞行员最真实的驾驶场景,完成任务获得奖励还能提高它的性能哦&#xff0…

npm安装vue_vue搭建脚手架的方式

基于window系统整理的vue脚手架npm、yarn安装方法,记得网络一定要好先说npm的安装方法先在需要创建项目的文件夹下打开终端,如果没有node可以先去官网下载,然后一路next,就OK,记得看清楚电脑操作系统是64还是32&#x…

Java中用JS那些_java web中javascript主要用哪些?

java web中javascript主要用途是在页面上完成特定按钮的事件功能并且实现前后台交互。JavaScript 是一种跨平台,面向对象的脚本语言。作为一种小巧且轻量级的语言,JavaScript 无意于独立运行,而是被设计为可以轻易嵌入到其它的产品和应用中&a…