python - 像 swift 一样在 python 中进行类扩展?

标签 python swift class extension-methods

我是 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/

相关文章:

java - 实现一个引用多个类的 Java 类/接口(interface)

python - sqlalchemy 外键关系属性

ios - 如何对齐 imageView 内的图像

ios - XIB 中的动画按钮以编程方式移动

ios - 从 namespace 生成 UUID?

c++ - 如何在 C++ 类中定义编译时(静态)常量?

css - Wordpress 发布图像(详细信息)默认类

python - 通过键从两个不同的列表生成列表

python - 仅抓取来自多个不同网站的内容

python - 你如何清理和转发用 Pandas 填充多天的 1 分钟时间序列?