【问题标题】:Perform operations on values with class attributes对具有类属性的值执行操作
【发布时间】:2021-06-08 18:43:33
【问题描述】:

假设我做了一个简单的类

class mercury:

    class orbial_characteristics:
        apehilion = 69816900
        perihilion = 46001200
        semi_major_axis = 57909050
        eccentricity = 0.205630
        orbital_period = 87.9691*86400
        orbital_speed = 47.362*1e3

现在,此处给出的值以 SI 为单位,例如 apehilion 的值以 km 为单位。我想创建另一个可以将值转换为给定单位的类,比如说天文单位。一种方法是将 apehilion 的值直接传递给该类

change_to_AU(value_of_apehilion)

这相对容易做到。但是,我正在寻找的是 python 核心操作的行。像这样的

merc_apehilion_km = mercury.orbital_characteristics.apehilion
merc_apehilion_au = merc_apehilion_km.change_to_AU()

我最近开始研究classes,通过阅读此处的答案和网络教程,但我不知道如何执行这样的操作。我什至尝试从numpypandas 读取核心文件,因为我最常用的这两个库有很多使用这种表示法的东西。

【问题讨论】:

  • 不要使用numpy(或pandas)作为类的模型。太多的类代码是用c写的。
  • 关于如何/从哪里获得所需结果的任何建议?

标签: python-3.x numpy python-class


【解决方案1】:

编辑:

一点研究让我找到了this 堆栈溢出页面。查看其中提到的库,确保它们得到积极维护,并考虑使用它们而不是执行我在下面演示的操作

编辑结束

创建这样的自定义方法将涉及为您的 SI 单位值创建自定义对象。这是一个例子:

class SIUnit:
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return self.value

    def to_astronimical_units(self):
        Calculations which convert apehilion to AU go here

        return result

class mercury:

    class orbial_characteristics:
        apehilion = SIUnit(69816900)
        perihilion = SIUnit(46001200)
        semi_major_axis = SIUnit(57909050)
        eccentricity = SIUnit(0.205630)
        orbital_period = SIUnit(87.9691*86400)
        orbital_speed = SIUnit(47.362*1e3)

请记住,to_astronomical_units 方法适用于您使用的所有 SI 单位,而不仅仅是距离,因此您可能希望创建一个基本 SIUnit 类,然后为每个 SI 单位创建一个子类,例如:

class SIUnit:
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return self.value

class Kilometer(SIUnit):
    def to_au(self):
        Calculations which convert apehilion to AU go here
        return result

class Ampere(SIUnit):
    def to_volts(self, wattage):
        return self.value / wattage

【讨论】:

  • 注意:可能有一个预先存在的库可以执行此操作。所以请在重新发明轮子之前做一些研究。 Python 经常用于科学计算,因此几乎可以肯定在线已经有解决方案。
  • 嘿,谢谢你的回答和建议,非常感谢。如果您不介意,正如我在帖子中所说,我是新来的课程,我正在学习它们,而实验恰好是我首选的学习方法,这就是问题的原因:-)
  • 没问题!这就是为什么我没有立即链接一个随机库并举了几个例子。祝你学习顺利!
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2021-02-12
  • 2020-10-21
相关资源
最近更新 更多