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

在另一个类构造函数(python)中初始化类的实例,python,Python,我有两个不同的类(例如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_ar

我有两个不同的类(例如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_参数时,无法访问它们,因为它们在类a而不是类B中。当我尝试仅使用a_参数时,我得到一个错误,即a_参数未定义。但是我不想重写B类构造函数中的所有self.a_参数,这样我就可以使用它们来创建a的实例。

我建议为B提供一个类型为a的初始化对象的构造函数,例如:

class B(object):
    def __init__(self, objectA):
        self.b_arguments = arguments 
        self.a = objectA

objectB = B(A(<args>))
B类(对象):
定义初始化(self,objectA):
self.b_参数=参数
self.a=objectA
objectB=B(A())

我建议为B提供类型为A的初始化对象的构造函数,例如:

class B(object):
    def __init__(self, objectA):
        self.b_arguments = arguments 
        self.a = objectA

objectB = B(A(<args>))
B类(对象):
定义初始化(self,objectA):
self.b_参数=参数
self.a=objectA
objectB=B(A())

如果要向某个对象传递数量不确定的参数,应该使用元组解包。下面是一些代码:

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
),类
one
two
three\u或更多
的字段被分配给输入参数的第一、第二和剩余元素

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

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))

如果要向某个对象传递数量不确定的参数,应该使用元组解包。下面是一些代码:

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
),类
one
two
three\u或更多
的字段被分配给输入参数的第一、第二和剩余元素

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

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))

您正在尝试将A实例作为参数,还是创建一个?我正在尝试创建一个实例。您正在尝试将A实例作为参数,还是创建一个?我正在尝试创建一个实例。