我目前有两个类的调用,就像这样。
first_partition = Partition(samplename='Sample1', nS=5)
second_partition = Partition(samplename='Sample2', nS=6, batchname = 'Batch1', nB=4).
由于分区类接受可变数量的参数,在我的init中,我有:
class Partition:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
我想要的是让first_partition和second_partition返回一个分区对象的实例,它有两个实例变量 - k和n - 取决于我调用的输入。
我有一个单独的类方法试图这样做:
def pobject(self):
nargin = len(self.__dict__)
# Return default object if no arguments
if nargin == 0:
self.n = 3
self.k = 0
return self.n, self.j
else if nargin == 2:
self.n = 0
self.k = self.nS + 1
return self.n, self.j
但要返回k和n,我必须这样做:
first_partition = Partition(samplename='Sample1', nS=5)
print(first_partition.pobject())
我想要的是第一行在我打电话时返回一些东西
first_partition = Partition(samplename='Sample1', nS=5)
我知道def __init__
无法返回任何内容,所以我尝试了def __new__
而不是def pobject但是它没有工作并给了我AtrributeError
。
答案 0 :(得分:0)
您可以更改__new__()
以对传递的参数进行检查,并根据该参数返回各种数据,不一定是实例本身:
class Partition(object):
def __new__(cls, **kwargs):
nargin = len(kwargs)
if nargin == 0:
return 3, 0
elif nargin == 2:
return 0, kwargs["nS"] + 1
# in other cases return a class instance...
return super(Partition, cls).__new__(cls)
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
但此时你正在通过黑客攻击类行为来模拟工厂功能。如果您需要工厂功能,请创建工厂功能。