Python继承:将所有参数从基类传递到超类

2024-03-01

我还不太习惯 Python 中的类继承。我想要做的只是在创建超类时将所有参数从基类传递给超类:

class A:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def do(self):
        c = self.a + self.b
        return B(c=c)

class B(A):
    def __init__(self, c):
        self.c = c

my_A = A(a=1, b=2)
my_B = my_A.do()
print(my_B.c)

这按预期工作。但是,我想要的是也能够调用参数a and b来自 my_B 类的 x2 实例,这样我就可以直接编写my_B.a例如。我知道这是用 super() 完成的,如下所示:

class A:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def do(self):
        c = self.a + self.b
        return B(a=self.a, b=self.b, c=c)

class B(A):
    def __init__(self, a, b, c):
        super(B, self).__init__(a=a, b=b)
        self.c = c

my_A = A(a=1, b=2)
my_B = my_A.do()
print(my_B.a)
print(my_B.b)

但是,我不想在创建 B 的实例时显式写入 A 的所有参数。有没有办法自动将所有参数从 A 类传递到 B 类?


根据您的评论,您可以执行以下操作:

class B(A):
    def __init__(self, c, an_a): 
        super(B, self).__init__(an_a.a, an_a.b)
        self.c = c

相反,您可能更愿意保留当前的构造函数并添加一个from_a静态方法:

class B(A):
    def __init__(self, c, a, b):  # note order
        super(B, self).__init__(a=a, b=b)
        self.c = c

    @staticmethod
    def from_a(c, an_a):
        return B(c, an_a.a, an_a.b)

最后,如果您不想键入所有这些参数,您可以添加一个args()方法A然后使用集合解包函数语法:

class A:
    ...
    def args(self):
        return (self.a, self.b)

class B(A):
    def __init__(self, c, *args):        # Note *args
        super(B, self).__init__(*args)
        self.c = c

    @staticmethod
    def from_a(c, an_a):
        return B(c, *an_a.args())

Now B的构造函数采用特殊参数B,后跟任意数量的参数,这些参数刚刚传递给A的构造函数。这允许您在调用构造函数时进行元组解包,而不是手动列出所有内容。

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

Python继承:将所有参数从基类传递到超类 的相关文章

随机推荐

  • 如何以编程方式列出 Rails 中的所有控制器

    我正在尝试构建一个 RESTful 应用程序来实际管理多种可配置对象 因此有大量的 资源 类型 因此有很多控制器 我仍处于 POC 阶段 所以如果我可以在第一个导航页面中显示所有控制器 那就太好了 那么有什么简单的方法 可编程 可以做到这一
  • 如何在 Silverlight 中更改 Textblock 的背景颜色?

    我想要一个黄色背景上有蓝色文本的文本块 我可以使用 前景 属性设置蓝色文本 但 背景 不起作用 我想那太简单了 那么最好的方法是什么 将其包裹在具有背景颜色的矩形或画布中 并且 我们是否应该了解有关 Silverlight 的任何内容 以了
  • 无法使用 ACI 卷。所需的驱动程序是“azure_file”

    尝试使用以下方式在 Azure 中部署此应用程序docker compose version 3 5 x environment default back environment Database settings POSTGRES DB
  • 在javascript中动态更新嵌套对象[重复]

    这个问题在这里已经有答案了 我有一个从 json 解码的对象 var data parentSeries 1 children BusinessRule ChrisTest2 ID ChrisTest2 3 childsub 3 jsonC
  • 如何在 Visual Studio 中将构建配置更改为发布?

    我正在尝试发布一个 Xamarin 项目 我怎样才能将构建配置更改为Release在 Visual Studio 2015 中 Update I have found the solution here it is 根据如何 设置调试和发布
  • 在 Composer 中设置“config.fxp-asset.installer-paths”选项

    当我运行composer update在继续更新之前我收到以下警告 The extra asset installer paths option is deprecated use the config fxp asset installe
  • 设计更好的 API?

    设计 API 时应遵循哪些最佳实践和模式 如何实现隐藏的最佳方式 C Java 设计本质上通用的 API 有哪些参考书 链接可以为初学者提供简洁的示例指导吗 我不确定我对你们所有的个人问题都有一个很好的答案 但我想我对第一个问题确实有一个很
  • isBeingPresented 值不一致

    我以模态方式呈现一个带有 ViewController 的 NavigationController 在 ViewController 中我可以看到self navigationController isBeingPresented是真的
  • Laravel - 将 Guzzle 请求记录到文件

    在开发一个项目时 我发现第三方 API 可以在 Postman 中运行 但不能在 Guzzle Client 中运行 调试 Guzzle 请求可能很困难 那么有没有什么方法可以记录 Guzzle 客户端发出的所有请求 TLDR 有一种简单的
  • Django CSRF 框架无法禁用并且正在破坏我的网站

    django csrf 中间件无法禁用 我已从项目的中间件中将其注释掉 但由于缺少 CSRF 问题 我的登录失败 我在 Django 主干上工作 如果中间件中未启用 CSRF 它如何会导致问题 我必须禁用它 因为我的网站上有很多 POST
  • 如何使用 pandas 获取某种格式的表格并导出为 csv?

    我是 pandas 的新手 我想要一个需要导出 csv 格式的表格 我尝试过的是 o rg o gg a rg a gg 是数组 df1 pd DataFrame RED o rg GREEN o gg df2 pd DataFrame R
  • 根据两列的值删除行

    我有一个巨大的文件 my file txt 大约有 8 000 000 行 如下所示 1 13110 13110 rs540538026 0 NA 1 33177622457982 1 13116 13116 rs62635286 0 NA
  • 在基本控制器中重写 ASP.NET MVC 中的 OnAuthorization

    在我的 ASP NET MVC 应用程序中 我试图确定用户是否有权访问特定控制器 该控制器受授权数据注释的限制 如下所示 Authorize Roles user 我正在尝试覆盖 OnAuthorization 以检查 如果请求已通过身份验
  • 在 C# 中异步加载图像

    我正在开发一个 C WPF 应用程序 它加载大量图像并将其显示为缩略图 我想以多线程的方式来做 因此我尝试实现一个BackgroundWorker BackgroundWorker的DoWork 的代码 string files e Arg
  • 使用 @PreUpdate 的问题

    我有以下课程 MappedSuperclass public abstract class MappedModel Id GeneratedValue strategy GenerationType AUTO Column name id
  • 引用另一个矩阵后,numpy.ones 的第一行仍然被填充

    我有一个矩阵 A 其值如下所示 使用 numpy ones 创建矩阵 B 并通过索引 i 行和 j 列将值从 A 分配到 B 后 生成的 B 矩阵保留第一行 1 来自原始的 B 矩阵 我不确定为什么下面提供的代码会发生这种情况 命令行生成的
  • 如何以编程方式将单击事件分配给以编程方式创建的项目符号列表?

    我尝试以编程方式编写一个方法并将其分配为 onclick 事件调用的方法 但有些地方不对 该方法未被调用 BulletedList bulletList new BulletedList 我使用将项目添加到项目符号列表中bulletList
  • 为什么我的 ' 字符在发布到我的服务器时变成了 \'?

    我对HTML不是很强 每次都会遇到一些编码问题 在这里 我有一个类似的表格
  • 如何给子类提供静态字段?

    我有一个名为 operation java 的抽象超类和几个扩展该类并表示操作的子类 每个这样的子类应该包含一个规范化内容的数组 该数组应该是静态的 因为它全局保存 我有以下示例 abstract class Operation priva
  • Python继承:将所有参数从基类传递到超类

    我还不太习惯 Python 中的类继承 我想要做的只是在创建超类时将所有参数从基类传递给超类 class A def init self a b self a a self b b def do self c self a self b r