我是 python 的新手,来自 swift,我想知道以下内容。如果我想向现有类添加功能,我可以快速执行以下操作(如书中示例所示):
extension Double {
var km: Double { return self * 1_000.0 }
var m: Double { return self }
var cm: Double { return self / 100.0 }
var mm: Double { return self / 1_000.0 }
var ft: Double { return self / 3.28084 }
}
let oneInch = 25.4.mm
我真的很喜欢这个功能,我想知道 python 中是否有类似的东西,或者有一些我没有看到的更好的方法,因此这在 python 中没有任何意义。
最佳答案
为了完整起见,我认为这是您应该做的(在 Swift 中也是如此!):
class Meter(float):
def to_km(self): return self * 1000.0
def to_m (self): return self
def to_cm(self): return self / 100.0
def to_mm(self): return self / 1000.0
def to_ft(self): return self / 3.28084
oneInch = Meter(25.4).to_mm()
print(oneInch)
明确表示您的对象代表一个仪表,并且您正在将其转换为某种东西。
如果你想要一些语法糖,我不确定它是否有帮助,你可以覆盖项目 getter,这样你就不必使用 ()
:
class Meter(float):
conversions = {
'km':1000,
'cm':.01,
'mm':.001,
'ft':1/3.28084
}
def __getattr__(self,x):
try:
return self*Meter.conversions[x]
except KeyError:
raise KeyError("No such conversion!")
oneInch = Meter(25.4).mm
print(oneInch)
添加转化非常简单:
Meter.conversions['whatever'] = 123.123
关于python - 像 swift 一样在 python 中进行类扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51689856/