Python 从类函数调用返回对象
我现在有两个类调用,就像这样Python 从类函数调用返回对象,python,oop,object,Python,Oop,Object,我现在有两个类调用,就像这样 first_partition = Partition(samplename='Sample1', nS=5) second_partition = Partition(samplename='Sample2', nS=6, batchname = 'Batch1', nB=4). 由于partition类接受可变数量的参数,因此在我的init中,我有: class Partition: def __init__(self, **kwargs):
first_partition = Partition(samplename='Sample1', nS=5)
second_partition = Partition(samplename='Sample2', nS=6, batchname = 'Batch1', nB=4).
由于partition类接受可变数量的参数,因此在我的init中,我有:
class Partition:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
我想要的是让第一个分区和第二个分区返回一个分区对象的实例,其中包含两个实例变量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\uu init\uuuuuuuu
不能返回任何东西,所以我尝试了def\uuuuu new\uuuuuuuuuu
而不是def pobject,但它不起作用,并给了我一个atributeerror您可以更改\uu new\uuuuuuuuuuuuuuuuu()
来检查传递的参数并基于此返回各种数据,不一定是实例本身:
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)
但在这一点上,您正在通过攻击类行为来模拟工厂函数。如果你想要一个工厂函数,那就制作一个工厂函数。如果你只想要k
和n
,或者如果你想要实例,为什么这甚至是一个类,为什么不在\uuuu init\uuuu
中设置k
和n
属性?您可以在类中定义一个自定义的\uuu调用
方法,然后只需执行以下操作:打印分区(samplename='Sample1',nS=5)()
调用\uuu\uuu
然后可以分派到pobject
方法我知道作为一个函数更好,但我的要求是我必须作为一个类来实现。