我们可以向 super() 传递什么参数?

2024-01-17

我创建了一个Vehicle类并且还想有一个Car从它派生的类调用父构造函数来设置name and color。但是我收到这个错误:

super() takes at least 1 argument (0 given)

这是我的代码:

class Vehicle:

    def __init__(self, name, color):
        self.__name = name      # __name is private to Vehicle class
        self.__color = color

    def getColor(self):         # getColor() function is accessible to class Car
        return self.__color

    def setColor(self, color):  # setColor is accessible outside the class
        self.__color = color

    def getName(self):          # getName() is accessible outside the class
        return self.__name
        self.__model = model

    def getDescription(self):
        return self.getName() + self.__model + " in " + self.getColor() + " color"


class Car(Vehicle):

    def __init__(self, name, color, model):
        # call parent constructor to set name and color
        super().__init__(name,  color)
        self.__model = model

    def getDescription(self):
        return self.getName() + self.__model + " in " + self.getColor() + " color"

# in method getDescrition we are able to call getName(), getColor() because they are
# accessible to child class through inheritance

c = Car("Ford Mustang", "red", "GT350")
print(c.getDescription())

Python 3 - 不错

在 Python 3 中,这是有效的:

class Vehicle:
    def __init__(self):
        print('Vehicle __init__() called')

class Car(Vehicle):
    def __init__(self):
        super().__init__()

car = Car()

prints:

Vehicle __init__() called

Python 2 - 更多工作

在 Python 2 中尝试同样的事情会导致问题:

class Vehicle:
    def __init__(self):
        print('Vehicle __init__() called')

class Car(Vehicle):
    def __init__(self):
        super().__init__()


car = Car()

抛出这个异常:

Traceback (most recent call last):
...
TypeError: super() takes at least 1 argument (0 given)

我们需要提供自己的类作为第一个和self作为第二个参数super():

class Vehicle:
    def __init__(self):
        print('Vehicle __init__() called')

class Car(Vehicle):
    def __init__(self):
        super(Car, self).__init__()

car = Car()

但这还不够:

Traceback (most recent call last):
...
TypeError: must be type, not classobj

class Vehicle:创建一个旧式类。Vehicle必须继承自object获得一个可以使用的新式类super():

class Vehicle(object):
    def __init__(self):
        print('Vehicle __init__() called')

class Car(Vehicle):
    def __init__(self):
        super(Car, self).__init__()

car = Car()

prints:

Vehicle __init__() called

Python 2 中不带参数的 super()

必须一直记住这两个论点有点烦人。幸运的是,有一个解决方案。强烈推荐的图书馆Python-未来 http://python-future.org允许您使用super()Python 2 中没有参数:

from builtins import object, super # from Python-Future

class Vehicle(object):
    def __init__(self):
        print('Vehicle __init__() called')

class Car(Vehicle):
    def __init__(self):
        super().__init__()

car = Car()

prints:

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

我们可以向 super() 传递什么参数? 的相关文章

随机推荐

  • 应用程序启动时 Membership.GetUser() 返回 null

    我已经实现了我自己的账户资料 https stackoverflow com questions 426609 how to assign profile values类是 ASP net MVC 并且它可以工作 但现在我遇到了一个奇怪的问
  • Google Chart getSelection 没有列属性

    当我使用时 chart getChart getSelection 0 在图表上 来自图表包装器 因此首先是 getChart getSelection 函数返回 只有行属性 但没有列属性 即使我的 图表 是一个表格 单击其中的任意位置都应
  • 如何标准化/减少 mongoDB 中的时间数据?

    我将详细的性能数据存储在 MongoDB 中 每个集合都是一种性能报告 每个文档都是阵列上端口在该时间点的测量结果 DateTime ISODate 2012 09 28T15 51 03 671Z array serial 12345 P
  • 测量 MKMapView 中绘制路线的距离(以米为单位)

    如何计算MKMapView中两个坐标之间的路线距离 我不是要求直线距离 而是要求转弯路线的距离 我假设你正在使用MKDirectionsRequest得到一个MKDirectionsResponse您从中获取路线 例如 MKDirectio
  • 如何在 JavaScript 中实现“onVisible”事件?

    是否有任何技术或一组技术可以用来实现实际上的onVisibleJavaScript 中的 事件 我希望我的 JavaScript 能够检测到当用户向下滚动页面时网页中的元素 例如一段文本或图像 何时在浏览器窗口中变得可见 我也想要一个相应的
  • 我无法安装 Docker,因为 containerd.io 没有安装候选

    我尝试在 Kubuntu 19 10 上安装 Docker 我使用以下步骤进行安装 https docs docker com install linux docker ce ubuntu https docs docker com ins
  • 当子div浮动时,父div失去自动高度

    我有一个名为 main 的父 div 它里面有一堆子div 我向左或向右浮动 当我完成最后一个浮动后 主 div 的高度完全消失 破坏了页面的布局 我给它的高度 100 就目前而言 但对于大多数分辨率来说它会过高 如何将其保持在流体高度 仅
  • 使用opencv复制/混合不同尺寸的图像

    我正在尝试混合两个图像 如果它们具有相同的大小 则很容易 但如果其中一张图像较小或较大 则 cv addWeighted 会失败 图A 预计更大 图B 预计较小 我试图创建一个 ROI 尝试创建 A 大小的第三个图像并将 B 复制到里面 我
  • spring data couchbase中的id是如何自动生成的?

    我想在 spring data couchbase 中为我的文档创建 ID 自动生成 Spring 文档对此有步骤 https docs spring io spring data couchbase docs current refere
  • 在 Laravel 查询生成器中进行投射

    我想要castLaravel 查询生成器中的 orderBy 因为我的price is varchar type 所以当它排序时 结果离我想要的很远 我的脚本是这样的 DB table test gt where gt orderBy pr
  • 如何在javascript中组合数组

    您好 我想根据数组中的唯一项合并数组 我拥有的对象 totalCells 在这个totalCells数组中我有几个像这样的对象 totalCells cellwidth 15 552999999999999 lineNumber 1 cel
  • 如何在选项卡关闭时删除 jquery cookie

    我的 cookie 工作正常 我没有提及日期 因此当浏览器窗口关闭时 cookie 就会被删除 但是当我关闭浏览器窗口中的选项卡时 cookie 不会被删除 并且当我打开网站时会打开相同的保留的 cookie 状态页面 当用户关闭浏览器选项
  • Java,循环结果集

    在Java中 我有一个这样的查询 String querystring1 SELECT rlink id COUNT FROM dbo Locate GROUP BY rlink id 表 rlink id 有以下数据 Sid lid 3
  • 迭代WPF Datagrid中的所有单元格[重复]

    这个问题在这里已经有答案了 可能的重复 WPF DataGrid 如何在 DataGrid 中迭代以获取行和列 https stackoverflow com questions 1295023 wpf datagrid how do yo
  • Tailwind css,如何设置默认字体颜色?

    我在我的项目中使用 tailwind css 由于我们的应用程序样式 我们使用默认字体颜色 但是我似乎找不到如何在 tailwind 中执行此操作 文档 https tailwindcss com docs text color页面只讨论了
  • Prolog 是否有像 Common Lisp 一样的条件和重启系统?

    Common Lisp 允许异常处理条件并重新启动 http www gigamonkeys com book beyond exception handling conditions and restarts html 粗略地说 当函数抛
  • 解析线性方程的系数

    在java中 我试图找到线性方程的系数 以在我的计算器应用程序中找到线性方程的解 例如 3x 2 6x 3 2 4x 我渴望得到的是 x 的系数和形式的常数ax b 0 在这个特定的例子中 coefficient 19 constant 8
  • 将内存中的 HTML 保存到 S3 AWS Python Boto3

    import boto3 from io import StringIO s3 boto3 client s3 display Altair Charting buff StringIO display save str obj html
  • 如何启动 Matlab 分析器

    我切换到 Matlab 2012b 从 2011a 但未能找到如何在新的 matlab gui 中启动分析器 gui GUI 选项仍然存在 在编辑器选项卡中 一旦函数崩溃 您将能够指定输入参数
  • 我们可以向 super() 传递什么参数?

    我创建了一个Vehicle类并且还想有一个Car从它派生的类调用父构造函数来设置name and color 但是我收到这个错误 super takes at least 1 argument 0 given 这是我的代码 class Ve