这是一个将点创建为 的示例p=Point(x, y)
。假设我有一些数组ppp=(x, y)
wherex
和y
are numbers 并且我想使它成为类Point
但方式:p=Point(ppp)
。我可以用一种或另一种方式做,但不能同时做。有没有可能有两种方式?
user1329187
问问题
375 次
5 回答
3
有两种不同的方法来获取结果,第一种是分析你传递给 __init__ 的参数,并根据它们的数量和类型 - 选择一个决定你用什么来实例化类。
class Point(object):
x = 0
y = 0
def __init__(self, x, y=None):
if y is None:
self.x, self.y = x, x
else:
self.x, self.y = x, y
另一个决定是使用类方法作为实例化器:
class Point(object):
x = 0
y = 0
@classmethod
def from_coords(cls, x, y):
inst = cls()
inst.x = x
inst.y = y
return inst
@classmethod
def from_string(cls, x):
inst = cls()
inst.x, inst.y = x, x
return inst
p1 = Point.from_string('1.2 4.6')
p2 = Point.from_coords(1.2, 4.6)
于 2012-08-10T10:50:32.183 回答
2
如果您在创建实例时知道p = Point(*ppp)
您有一个元组/列表,您可以这样做: ,ppp
元组在哪里。
于 2012-08-10T11:07:18.887 回答
0
class Point:
def __init__(self, x, y=None):
if isinstance(x, tuple):
self.x, self.y = x
else:
self.x = x
self.y = y
于 2012-08-10T10:46:21.280 回答
0
是的:
class Point(object):
def __init__(self, x, y=None):
if y is not None:
self.x, self.y = x, y
else:
self.x, self.y = x
def __str__(self):
return "{}, {}".format(self.x, self.y)
print Point(1,2)
# 1, 2
print Point((1,2))
# 1, 2
于 2012-08-10T10:46:23.170 回答
-1
我猜您正在寻找一种方法来重载您的构造函数,这在 C++ 和 Java 等静态类型语言中很常见。
这在 Python 中是不可能的。您可以做的是提供不同的关键字参数组合,例如:
class Point(object):
def __init__(self, x=None, y=None, r=None, t=None):
if x is not None and y is not None:
self.x = x
self.y = y
elif r is not None and t is not None:
# set cartesian coordinates from polar ones
然后您将其用作:
p1 = Point(x=1, y=2)
p2 = Point(r=1, t=3.14)
于 2012-08-10T10:56:08.673 回答