对具有 class 属性的值执行操作
Perform operations on values with class attributes
假设我做了一个简单的 class
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
的值以公里为单位。我想制作另一个 class 可以将值转换为给定单位,比如说天文单位。一种方法是将apehilion的值直接传递给那个class
change_to_AU(value_of_apehilion)
相对容易做到。但是,我正在寻找的是 python 核心操作。像这样
merc_apehilion_km = mercury.orbital_characteristics.apehilion
merc_apehilion_au = merc_apehilion_km.change_to_AU()
我最近开始研究 classes
,方法是阅读此处的答案和网络教程,但我不知道如何执行此类操作。我什至尝试从 numpy
和 pandas
读取核心文件,因为我最常使用的这两个库有很多使用这种表示法的东西。
编辑:
一点研究让我找到了 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
class 然后再创建一个子单位class 每个 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
假设我做了一个简单的 class
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
的值以公里为单位。我想制作另一个 class 可以将值转换为给定单位,比如说天文单位。一种方法是将apehilion的值直接传递给那个class
change_to_AU(value_of_apehilion)
相对容易做到。但是,我正在寻找的是 python 核心操作。像这样
merc_apehilion_km = mercury.orbital_characteristics.apehilion
merc_apehilion_au = merc_apehilion_km.change_to_AU()
我最近开始研究 classes
,方法是阅读此处的答案和网络教程,但我不知道如何执行此类操作。我什至尝试从 numpy
和 pandas
读取核心文件,因为我最常使用的这两个库有很多使用这种表示法的东西。
编辑:
一点研究让我找到了 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
class 然后再创建一个子单位class 每个 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