提问人:peaky76 提问时间:9/20/2023 更新时间:9/20/2023 访问量:41
在 python __init__ 中强制转换类型
Casting types in python __init__
问:
我有一个python类,其中一个属性应该是十进制。init 方法(示例 a)中的强制转换是否存在任何潜在问题,或者它只是一个设计选择?是否有理由更喜欢在调用代码中强制转换(示例 b)?
示例 a
class MyClass:
def __init__(self, value: int | str | float):
self.value = Decimal(value)
x = MyClass(1)
y = MyClass('1')
z = MyClass(1.0)
示例 b
class MyClass:
def __init__(self, value: Decimal):
self.value = value
x = MyClass(Decimal(1))
y = MyClass(Decimal('1'))
z = MyClass(Decimal(1.0))
答:
0赞
AKX
9/20/2023
#1
如果你总是在内部处理小数,在构造函数中进行强制转换,这很好(这样更好,因为类的用户不需要处理它)。MyClass
评论
0赞
Codist
9/20/2023
反驳的论点是如何处理传递的值 (str) 无法转换为 Decimal 的情况?
0赞
AKX
9/20/2023
@DarkKnight 构造函数将引发异常。即使你这样做了,情况也会如此.MyClass(Decimal("foople"))
0赞
Codist
9/20/2023
谢谢。我知道那件事。我的观点是,这可能不是一个很好的设计选择。也许这是个人的事情,因为我发现__init__能够提出异常诅咒的概念
0赞
Codist
9/20/2023
在MyClass(Decimal(“foople”))的情况下,异常不会在__init__中引发,这正是我的观点
3赞
peaky76
9/20/2023
为什么构造函数中的异常是诅咒的?在 Decimal 的构造函数中引发异常不是吗?Decimal("foople")
评论
MyClass.from_input(...)
MyClass(Decimal(...))