我在realpython.com中找到了一段关于pythonSuper()的代码,我不明白如果Rectangleinit和Triangelinit方法中的Super()都没有父类(不继承),那么它们的作用是什么.

    class Rectangle:
        def __init__(self, length, width, **kwargs):
            self.length = length
            self.width = width
            super().__init__(**kwargs)

        def area(self):
            return self.length * self.width

    class Square(Rectangle):
        def __init__(self, length, **kwargs):
            super().__init__(length=length, width=length, **kwargs)

    class Triangle:
        def __init__(self, base, height, **kwargs):
            self.base = base
            self.height = height
            super().__init__(**kwargs)

        def tri_area(self):
            return 0.5 * self.base * self.height

    class RightPyramid(Square, Triangle):
        ...

推荐答案

这样,这些类可以与多重继承一起工作,并且它们may在编码时获得未知的祖先-对super的调用,传递它们可能获得的任何未知参数,确保它们在以这种方式使用时会很好.

例如,假设这些形状用于表示创建混凝土3D打印塑料对象.

class Print3D:
    def __init__(self, *, filament="PLA", **kw):
         self.filament=filament 
         print("Print3D part initialized")
         super().__init__(**kwargs)

一个人现在可以做:

class PrintedSquare(Square, Print3D):
    pass

mysquare = PrintedSquare(length=20, filament="PVC")

一切都会好起来的.

Python-3.x相关问答推荐

为什么打印语句在Python多处理脚本中执行两次?

如何将CSV或FDF数据解析到Python词典并注入到模板PDF表单中?

Python:字典和列表:在列表字典中搜索子列表的有效方法

Pandas groupby 然后 for each 组添加新行

如果集合大于 len(x),则 pandas 在重复的行中拆分集合列

有没有一种方法可以通过输入从 0 到 255 的 R、G 和 B 值来生成 RGB colored颜色 ,而无需使用 python 中的 matplotlib 模块?

如何使用复选按钮更改 Pyplot 轴的属性?

如何向 scikit-learn 函数添加类型提示?

删除Pandas 数据框行不起作用

使用 from re findall 组合连续匹配并分离非连续匹配

命名元组内命名元组的 Python 语法

如何确定一个类的元类?

使用 Python 3 按行进行分析

如何在 Python 3 中通过 IP 获取 WhoIs 信息?

如何使用 asyncio 添加连接超时?

ImportError:无法导入名称cross_validate

Python的max函数有多高效

谁能给我一个 Python 3 中标准输入和标准输出的快速教程?

TypeError:多个基地有实例布局冲突

哪个更有效:Python 文档字符串还是类型提示?