我希望能够定义一种不同的类方法,具体取决于输入之一是否存在。比如:
class mcmc(object):
def __init__(self, X, Y=None):
if Y is None:
def input_vector(self, beta):
return beta.dot(X)
else:
def input_vector(self, beta):
return beta.dot(np.vstack([X, Y]))
我可以直接在方法中编码,例如:
class mcmc(object):
def __init__(self, X, Y=None):
self.X = X
if Y is not None:
self.Y = Y
def input_vector(self, beta):
if self.__hasattr__('Y'):
return return beta.dot(np.vstack([self.X, self.Y]))
else:
return beta.dot(self.X)
但是该函数被重复使用(数百万次),因此可能会增加很多执行时间。
另一种类似的可能性,受到如何根据同一个类中另一个方法的输入来调用类中的任何方法?,可能是:
class mcmc(object):
def __init__(self, X, Y=None):
self.X = X
if Y is not None:
self.Y = Y
self.method = 'input_vector_XY'
else:
self.method = 'input_vector_X'
def input_vector(self, beta):
return self.__getattribute__(self.method)(beta)
def input_vector_XY(self, beta):
return return beta.dot(np.vstack([self.X, self.Y]))
def input_vector_X(self, beta):
return beta.dot(self.X)
这还涉及调用附加函数的“开销”。
无需在每个实例级别上执行此操作,您可以通过定义两个不同的类(可能具有公共基类)在类级别上执行此操作,并创建
mcmc
一个工厂函数,该函数返回一个或另一个类的实例:
def mcmc(X, Y=None):
if Y is None:
return MCMCWithoutY(X)
else:
return MCMCWithY(X, Y)
class MCMCWithoutY:
def __init__(self, X):
self.X = X
def input_vector(self, beta):
return beta.dot(self.X)
class MCMCWithY:
def __init__(self, X, Y):
self.X = X
self.Y = Y
def input_vector(self, beta):
return beta.dot(np.vstack([self.X, self.Y]))