在另一个类构造函数(python)中初始化类的实例
我有两个不同的类(例如a和B),我尝试将类a的实例作为类B中的参数。编辑:我尝试在类B的构造函数中创建实例,以便将其用于类B中的后续方法 基本上:在另一个类构造函数(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
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实例作为参数,还是创建一个?我正在尝试创建一个实例。