python - 包含只有静态方法的类的模块

标签 python class design-patterns static-methods

我有一个包含许多类的 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:
    # ...

# ...

Classes 仅作为所有数据的容器,大量的 @staticmethods 让我怀疑可能有更合适的设计模式这个用例。

有什么提示吗?

最佳答案

您可以将模块命名为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/

相关文章:

python - 如何将 Memcache 与 ProtoRPC 结合使用(Google App Engine - Python)

python - DataFrame - 值错误 : Unexpected tuple with StructType

python - 有效地计算 numpy 列中的重复值并附加计数

java - 使用带参数的命令模式

javascript - 如何管理应用程序和 URL 中的状态?

python - 如何让 Pool.map 采用 lambda 函数

c++ - 如何为不同的类声明相同的对象名称?

c# - 在选择要写入新应用程序的第一个 "class"时,您应该如何决定?

ruby - 使用 Sinatra 跟踪比分和回合数

c# - 我什么时候可以在 native foreach 循环上使用 List<T>.ForEach?