我有一个包含许多类的 Python 模块,每个类代表一种特定的物理材料及其属性(例如密度、比热)。有些属性只是float
该类的成员,但许多取决于某些参数,例如温度。我通过实现这个@staticmethod
s,即所有的类看起来像
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:
# ...
# ...
The Class
因此,es 只是充当所有数据的容器,以及丰富的数据@staticmethod
这让我怀疑对于这个用例可能有更合适的设计模式。
有什么提示吗?
您可以命名您的模块copper
并将所有这些创建为模块级函数,然后import copper; copper.density(0)
.
但如果有人这样做怎么办from copper import density
,并且您还有一个名为的模块cobalt
另一个叫carbon
另一个叫chlorine
等等,都有自己的density
功能?呃哦。
Since 我们都是同意的成年人 https://mail.python.org/pipermail/tutor/2003-October/025932.html,您可以记录这一点并期望您的用户足够了解以仅导入该模块。或者你可以采取你的方法;在这种情况下,我会考虑将所有元素放入一个名为的模块中elements
,那么用户可以from elements import Copper
。那么静态方法就合适了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)