下面的代码是一个基本的Angle对象的初始化方法,它的父类是浮动。
class Angle(float):
def __init__(self, value, vertex2 = None, vertex3 = None, atype = 'convex'):
#type-checking for the input args
try:
#checks for value arg
angle = value
if not (0 < value < 360):
angle %= 360
except TypeError:
#checks for three-vertice args
try:
angle = three_point_angle(value, vertex2, vertex3)
#three_point_angle is a function to calculate the
#convex angle between three vertices (i.e. at vertex2)
if atype == 'concave':
angle = 360 - angle
self._vdict = {}
for pos, vert in enumerate([value, vertex2, vertex3]):
self._vdict[pos] = vert
except:
raise TypeError(\
"You may only specify either an angle value, or three vertices from which \
to calculate the angle. You input a %s, %s and %s value." % (\
type(value), type(vertex2), type(vertex3)))
self.angle = angle
此类背后的思想是,您可以输入角度值,或者指定三个顶点(以及可选的角度类型参数)以自动计算角度。最后,自我。角度总是初始化的,这是进行所有运算的地方(因此\uuuu add\uuuu(self,other)
会影响self。角度
)。
它从float
继承的原因是继承了反射和增强赋值的神奇方法,这些方法都是在self上执行的。角度
。
当试图为顶点输入三个值时,就会出现问题。由于它继承自float
,因此不能接受多个参数,因此会引发错误。我该如何解决这个问题?我的猜测是,我必须为Angle
创建一个\uuuuuuu新的
见这一相关问题:
如何在Python中为自定义类重载'float()'?
然后改变
class Angle(float):
到
class Angle(object):
您不需要从float继承。你认为神奇的方法是在自己身上实施的,这是错误的。角他们只是自我表演。请尝试以下代码:
class Angle(float):
def __init__(self, x):
self.angle = x
def double(self):
self.angle *= 2
a = Angle(1)
a.double()
print a # prints 1.0
print a.angle # prints 2
a *= 5
print a # prints 5.0
print a.angle # throws AttributeError
a.angle
不受魔法方法的影响,float(a)
也不受a.angle
上的操作的影响float
s是不可变的,因此a*=5
创建了一个具有不同属性的新float。
因此,如果将角度
更改为继承自对象
而不是浮动
,则可以控制初始化,而不会失去任何便利。
问题内容: 我正在尝试使用具有抽象基类的Python类型注释来编写一些接口。有没有一种方法来注释可能的类型和? 例如,如何表达一个函数的明智参数是一个或两个?给出,所以我的猜测是将类型注释为,但这是行不通的。 来自mypy的错误消息: Mypy不喜欢此函数调用是有道理的,因为它希望调用本身中包含a。解压后的附加内容还会产生我不理解的输入错误。 一个人如何诠释明智的类型和? 问题答案: 对于可变位置
我正在用抽象基类尝试Python的类型注释来编写一些接口。有没有办法注释和的可能类型? 例如,如何表示函数的合理参数是一个或两个s给出了,所以我猜应该将该类型注释为,但这不起作用。 来自mypy的错误消息: mypy不喜欢函数调用这样是有道理的,因为它期望调用本身中有一个。开箱后的添加也给出了一个我看不懂的打字错误。 如何注释和的合理类型?
问题内容: 为了理解 args和* kwargs,当我遇到这个问题时,我进行了一些搜索* args和** kwargs? 所选答案下方的答案引起了我的注意,这是: 我在此示例上尝试了一些操作,并以这种方式运行代码: 我懂了: 变像 结果是: 出于某些头脑混乱的原因,我对此提出质疑:上面的示例中是对还是错?现实生活中将允许做什么,而在现实生活中不允许做什么? 问题答案: 你不会 不 支持任意关键字参
我正在尝试创建一个名为的类,其函数允许传入另一个对象,该对象可能是类型。但是当我尝试键入允许该类型对象的提示时,Python会抛出错误,因为尚未定义。这是代码,当我取出类型提示时有效: 我得到的错误是: 我有什么方法可以实现这一点吗?还是这是不可能的,我不应该费心?
假设我们有一个带有签名的函数 是否有可能实施一个约束来确保a和b是不同的?那就是 这个问题的目的是了解更多关于Haskell的信息,并可能解决我面临的一个设计问题。如果a==b,我的特殊情况是没有意义的,所以我想在编译器级别禁止这样做。我可能会用一个完全不同的设计来解决这个问题,但这不仅仅是现在的重点--潘多拉盒子已经打开,我想知道类型级别上的等式约束是否可能。
这是我的场景,我有三节课。 这里translate方法返回动物对象,但我需要使用相同的方法返回狗和猫类型,而不需要进行类型转换。我知道我必须在这里使用泛型,但是我如何编辑translate方法来支持泛型,这样我就可以将类类型传递给它的参数,如果使用Cat参数调用它就返回Cat对象,如果使用动物参数调用它就返回动物对象,如果使用Dog参数调用它就返回Dog对象。 例如:-而不是 Cat newCat