我有一个包含许多类的 Python 模块,每个类代表一种特定的物理 Material 及其属性(例如,密度、比热)。一些属性只是类的 float
成员,但许多属性取决于某些参数,例如温度。我通过 @staticmethod
实现了这个,也就是说,所有的类看起来都像
class Copper:
magnetic_permeability = 1.0
@staticmethod
def density(T):
return 1.0 / (-3.033e-9 + 68.85e-12*T - 6.72e-15*T**2 + 8.56e-18*T**3)
@staticmethod
def electric_conductivity(T, p):
return 1.0141 * T**2 * p
@staticmethod
def specific heat(T):
return # ...
class Silver:
# ...
class Argon:
# ...
# ...
Class
es 仅作为所有数据的容器,大量的 @staticmethod
s 让我怀疑可能有更合适的设计模式这个用例。
有什么提示吗?
最佳答案
您可以将模块命名为copper
并将所有这些创建为模块级函数,然后import copper;铜.density(0)
.
但是,如果有人执行 from copper import density
,并且您还有一个名为 cobalt
的模块,另一个名为 carbon
,另一个名为 chlorine
等等,都有自己的 density
功能?呃哦。
自 we're all consenting adults here ,您可以将其记录下来并期望您的用户足够了解以仅导入该模块。或者你可以采取你的方法;在这种情况下,我会考虑将所有元素放在一个名为 elements
的模块中,然后用户可以from elements import Copper
。静态方法将是合适的。
关于python - 包含只有静态方法的类的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21883511/