Python 类继承问题

2024-01-10

我正在研究 Python 类继承并遇到了一个问题,继承的__init__如果从子类(下面的代码)调用,则不会执行我从 Active Python 得到的结果是:


>>> start
Tom Sneed
Sue Ann
Traceback (most recent call last):
  File "C:\Python26\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 312, <br>in RunScript
    exec codeObject in __main__.__dict__
  File "C:\temp\classtest.py", line 22, in <module>
    print y.get_emp()
  File "C:\temp\classtest.py", line 16, in get_emp
    return self.FirstName + ' ' + 'abc'
AttributeError: Employee instance has no attribute 'FirstName'

这是代码

class Person():
    AnotherName = 'Sue Ann'
    def __init__(self):
        self.FirstName = 'Tom'
        self.LastName = 'Sneed'

    def get_name(self):
        return self.FirstName + ' ' + self.LastName

class Employee(Person):
    def __init__(self):
        self.empnum = 'abc123'

    def get_emp(self):
        print self.AnotherName
        return self.FirstName + ' ' + 'abc'

x = Person()
y = Employee()
print 'start'
print x.get_name()
print y.get_emp()

三件事:

  1. 您需要显式调用构造函数。它不会像 C++ 那样自动为您调用
  2. 使用从object继承的新式类
  3. 对于新式类,使用可用的 super() 方法

这看起来像:

class Person(object):
    AnotherName = 'Sue Ann'
    def __init__(self):
        super(Person, self).__init__()
        self.FirstName = 'Tom'
        self.LastName = 'Sneed'

    def get_name(self):
        return self.FirstName + ' ' + self.LastName

class Employee(Person):
    def __init__(self):
        super(Employee, self).__init__()
        self.empnum = 'abc123'

    def get_emp(self):
        print self.AnotherName
        return self.FirstName + ' ' + 'abc'

建议使用 super,因为它还可以正确处理在多重继承情况下仅调用一次构造函数(只要继承图中的每个类也使用 super)。如果/当您更改类的继承来源时,这也是您需要更改代码的地方(例如,您分解出基类并更改派生,并且不需要担心您的类调用错误的父类)构造函数)。同样在 MI 方面,您只需要一次超级调用即可正确调用所有基类构造函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 类继承问题 的相关文章

  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某

随机推荐

  • Angular UI 网格滚动错误

    我正在使用 ui grid 3 0 6 直到昨天 它都运行良好 但是现在Google chrome有问题 版本56 0 2924 87 当我滚动网格或单击向下滚动箭头时 它开始快速滚动 无法控制速度 它运行良好 并且仅在 Chrome 中运
  • Linux Kernel 4.2中如何获取当前进程的UID和EUID?

    正如 LDD3 第 6 章 p175 所示 我们可以通过以下方式获取当前进程 UID 和 EUIDcurrent gt uid and current gt euid 但定义struct task structLinux Kernel 4
  • 为什么查看页面源代码与检查页面元素不同[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 好吧 我在我的项目中经常使用 Producteev com 前几天我注意到在我的工作区页面上 页面的源代码 Ctrl U 非常短 并且
  • React Router v4 中的 hashHistory 在哪里?

    我正在尝试为我的 React 应用程序使用路由器 我尝试了一段时间之前一直在使用的东西 但似乎无法启动 有hashHistory在 React Router v4 中被删除 重新格式化
  • 在酶中使用 id 进行包装器查找,并且玩笑未找到元素

    我是 Jest 和 Enzyme 测试的新手 我想知道为什么 find 函数不能与 id 一起使用 来自react的html 只是id增量的代码 div div div div
  • LL 解析器比 LR 解析器有什么优势?

    LL 解析器相对于 LR 解析器有什么优势来保证它们在当今的解析器生成器工具 http en wikipedia org wiki Comparison of parser generators 根据维基百科 http en wikiped
  • 使用 Bluehost 帐户设置 PHPMailer

    我尝试联系 Bluehost 的支持人员 但他们不知道如何设置 我所做的是首先创建我的电子邮件帐户 VPS 帐户 然后获取我的电子邮件设置的所有详细信息 电子邮件设置 邮件服务器用户名 电子邮件受保护 cdn cgi l email pro
  • golang反映值类型的切片

    fmt Println v Kind fmt Println reflect TypeOf v 如何找出切片的反射值的类型 上面的结果是 v Kind slice typeof reflect Value 当我尝试Set如果我创建了错误的切
  • 使用 C# 循环遍历屏幕上给定标签 WP7 的所有按钮

    我正在寻找一种简单的方法来循环浏览屏幕上给定标签的所有按钮 例如 富 我正在使用 WP7 使用 C 我对这个平台很陌生 所以对我要轻松一些 P 谷歌搜索这类事情对我来说也不太有效 我认为我的术语是错误的 所以任何关于这方面的提示也将不胜感激
  • CakePHP 应用程序部署

    我有兴趣了解人们如何部署他们的 CakePHP 应用程序 最近有人联系我做一些自由的 CakePHP 开发 这对我来说是一个在表示层获得一些经验的好机会 在我的 FT 工作中 我在业务层和持久层进行 Java EE 开发 此时我的想法有点混
  • 动态加载控制器和 ng-include

    目前我有一个有侧边栏的应用程序 侧边栏使用以下方式加载不同的html模板ng include基于用户选择执行的操作 这是一个与地图相关的应用程序 例如 如果用户选择 添加航段 按钮 它将加载add leg html使用模板将其放入侧边栏ng
  • Android数据存储在xml中

    我有一个网络平台 用于存储我正在构建的应用程序的数据 Web 平台是使用 Ruby on Rails 构建的 主要应用程序适用于 Android 我很想知道将数据存储在 XML 文件 对于 Android 应用程序 中的任何性能问题 最终
  • Swift:如何在登录视图后显示选项卡栏控制器

    我在这里看到了很多与此类似的帖子 但它们都是关于 Objective C 而我正在用 Swift 开发我的应用程序 正如您从图像中看到的 我有一个登录屏幕视图 并且我正确地实现了登录机制 现在我希望登录成功后 显示选项卡栏控制器 在我的登录
  • 我可以将 tf.map_fn(...) 应用于多个输入/输出吗?

    a tf constant 1 2 3 4 5 6 b tf constant True False dtype tf bool a eval array 1 2 3 4 5 6 dtype int32 b eval array True
  • 无法在 Elasticsearch 中注册快照存储库

    我正在使用 Elasticsearch 1 4 和 ubuntu 12 04 3 LTS 尝试为本地 elasticsearch 创建快照 我参考这个website http www elasticsearch org guide en e
  • TYPO3:如何在后端添加css和JS

    我该如何添加css and javascript后端有文件吗 我想将这些文件用于自定义创建的内容元素以使它们对用户更具吸引力 System TYPO3 v9 Mode 作曲家模式 Target 自定义内容元素 在 TYPO3 v9 中 您必
  • N 个函数调用后的睡眠装饰器 Python/Selenium

    使用 Python Selenium 我定义了一个休眠装饰器 在 Web 抓取项目的 5 个函数调用 对服务器的请求 之间等待 20 秒 这样我就不会压垮他们的服务器 查看终端输出 它似乎按照我的预期工作 但是当我在创建输出文件 Hitac
  • 输入类型时间,有24小时以上选项

    我想使用时间输入来允许用户在视频中选择精确的时间 在一些很长的视频上 我不希望输入将选择限制为最大 23 59 59 是否可以选择例如 46 59 10 IE 保持分钟和秒部分的原始行为 但允许小时超过 23 我尝试设置max 10000
  • 如何在 iOS 中使用 Swift 正确检索加速度计数据?

    我正在尝试记录 iPhone 加速度计 我自己的 iPhone 5s 的数据 并使用以下命令在屏幕上为该数据设置标签String format 2f data 其中 data 是我要记录的特定轴的值 为此 我设置了 CMMotionMana
  • Python 类继承问题

    我正在研究 Python 类继承并遇到了一个问题 继承的 init 如果从子类 下面的代码 调用 则不会执行我从 Active Python 得到的结果是 gt gt gt start Tom Sneed Sue Ann Traceback