【发布时间】:2022-11-13 01:35:46
【问题描述】:
我有两个类,例如,我将它们称为“点”和“向量”(就像在数学中一样)。我希望另一个类调用其中一个类来“转换”例如一个点到相应的向量((1,2,1)->(1,2,1)T)。
argsintfloat = lambda l: all(isinstance(i, (int,float,complex)) for i in l)
class Point:
def __init__(self, *args):
if not argsintfloat(args):
raise ValueError("non-numeral values are not supported")
self.coordinates = args
def Vector(self):
return Vector(*self.coordinates)
class Vector:
def __init__(self, *args):
if not argsintfloat(args):
raise ValueError("non-numeral values are not supported")
self.components = args
def Point(self):
return Point(*self.components)
现在,例如调用以下命令:
point1 = Point(1,2,3,4)
vector1 = Vector(point1)
我刚刚到达 ValueError
ValueError: non-numeral values are not supported
当给定的值不是 int、float 或 complex 时,正如预期的那样。我明白为什么会出现这个问题;类 Vector 被调用而不是类 Point 中的函数 Vector 并且由于类对象不是 int、float 或复杂的......通常我只是用
point1.Point()
但我不想用它来解决这个问题。我想让这在视觉上尽可能简单,而不需要进一步指定 args 类型转换在里面().任何人都知道如何实现这一目标?
【问题讨论】:
-
您遇到了名称冲突(名称重复,请尝试重命名函数:
def to_vector -
请用您的真实代码更新您的问题。我得到:
SyntaxError: invalid syntaxdef Vector: -
没有实际的碰撞,但
Vector和Point.Vector是两个不同的东西。