gpt4 book ai didi

python - 在另一个类构造函数中初始化类的实例(python)

转载 作者:行者123 更新时间:2023-12-02 15:05:24 29 4
gpt4 key购买 nike

我有两个不同的类(例如 A 和 B),我试图将 A 类的实例作为 B 类中的参数。编辑:我试图在B 类,以便我可以将它用于 B 类中的后续方法。

基本上是这样的:

class A(object):
def __init__(self, various arguments):
self.a_arguments = arguments

class B(object):
def __init__(self, various arguments):
self.b_arguments = arguments
self.a = A(arguments of A)

在这种情况下,如何在尝试创建实例 self.a 时列出“A 的参数”?当我将参数写为 self.a_arguments 时,无法访问它们,因为它们在 A 类而不是 B 类中。当我只尝试 a_arguments 时,我得到一个错误,指出 a_arguments 未定义。然而,我不想仅仅为了使用它们创建 A 的实例而重写 B 类构造函数中的所有 self.a_arguments。

最佳答案

如果你想将不确定数量的参数传递给某物,你应该使用元组解包。这是一些代码:

class A(object):
def __init__(self, *args):
self.one, self.two, self.three_or_more = *args

class B(object):
def __init__(self, arg_for_b, arg2_for_b, *a_args):
self.ab = arg_for_b
self.ab2 = arg2_for_b
self.a = A(*a_args)

这是如何工作的?

A 通过 splat (*) 运算符接受任意数量的参数。使用元组解包(*var),类onetwothree_or_more 的字段被分配给输入参数的第一个、第二个和其余元素。

这些可以作为 foo = A(1,2,3,4,5,6,7,8,9...inf) 传递,通过放置 *args 在构造函数中,可以有任意数量的 args 并且它们不强制位于列表或元组中。

B 自身有两个参数,其余参数被拼凑成一个集合以传递给 A

在使用中:

>>> from module import A,B
foo = B(1,2,3,4,5)

关于设计的注意事项——在一个类构造函数中初始化另一个类可能不是一个好主意。如果代码看起来像这样可能会更容易理解:

class A(object):
def __init__(self, *args):
self.one, self.two, self.three = *args

class B(object):
def __init__(self, arg_for_b, arg2_for_b, A_obj):
self.ab = arg_for_b
self.ab2 = arg2_for_b,
self.a = A_obj

>>> from module import A,B
foo = B(1,2,A(3,4,5))

关于python - 在另一个类构造函数中初始化类的实例(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47060455/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com