У меня есть модуль Python, который содержит несколько классов, каждый из которых представляет определенный физический материал со своими свойствами (например, плотность, удельная теплоемкость). Некоторые из свойств - это только float
членов класса, но многие зависят от некоторого параметра, например от температуры. Я реализовал это через @staticmethod
с, т.е. все классы похожимодуль с классами только с статическими методами
class Copper(object):
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(object):
...
class Argon(object):
...
...
В Class
эс, таким образом, действуют просто как контейнеры для всех данных, а также обилие @staticmethod
с имеет меня подозревать, что там может быть более соответствующий шаблон проектирования для этого варианта использования.
Любые подсказки?
Если это статическое ... это означает, что это в основном фиксированные значения. Если это так, это действительно данные и, возможно, лучше обрабатываются как более традиционная структура данных. словарь, если вы хотите создать его в прямом эфире, что-то вроде xml/yaml, если вы хотите загрузить, если с диска. Я даже написал набор классов, которые будут загружать XML и выставлять его в качестве атрибутов, поэтому вы все равно можете делать такие вещи, как 'metals.copper.magnetic_permeability * 4', даже если« металлы »были загружены из XML. что-то подобное может дать вам лучшее из обоих миров ... –
Но свойства зависят от температуры и т. д. –
staticmethod на самом деле кажется вполне уместным. –