我正在学习Python,而我刚结束学习该类的基础知识。这是我正在学习的第一种OOP语言,因此目前并不是所有事情都非常清楚。无论如何。
我想知道是否有可能在Python(3.6)中创建一个我们不知道一些对象属性的类(或者在许多可能的对象中只有2或3个)。
例如,假设您要通过分子的性质定义分子,以便可以在另一个程序中使用它们来建模或预测事物。您可以涉及的基本属性是(例如)test1
,Temperature
和MolecularWeight
。但是,您也可以使用20个不同的参数轻松定义分子。但是,其中的某些分子可能并非每个分子都存在,或者您目前可能不需要使用它们。 (即软件的第一个版本,...)。
问题:
我想知道Python 3.x中是否存在以下语法,以便该类能够准确创建分子具有的参数数量。我认为定义数以千计的分子不存在的变量将花费大量的存储空间。
MolarVolume
我的目标是使用文件.txt记录我的分子的属性(我有成千上万的分子),并按定义的顺序对它们的属性进行排序,以便在使用该类时,如果分子中的甲醇具有10个参数与前面提到的前三个相同,然后该类将按顺序创建具有十个属性的分子“甲醇”。
否则,如果不存在,我默认情况下是否应该创建一个具有所有参数的类,并根据情况将其中一些参数视为无用?还是使用更好的东西?
提前谢谢
答案 0 :(得分:6)
您可以使用keyword arguments和setattr
函数来做到这一点:
class Molecule:
def __init__(self, temperature, molecular_weight, molar_volume, **properties):
self.temperature = temperature
self.molecular_weight = molecular_weight
self.molar_volume = molar_volume
for k, v in properties.items():
setattr(self, k, v)
我还用蛇把您的变量名as is convention括起来。然后
m = Molecule(15, 7.5, 3.4, other_property=100)
m.other_property # returns 100
答案 1 :(得分:1)
您听说过词典吗?
properties = {'A':'value', ... , 'ljkhasdfljkhasdfhj':'value'}
如果添加名为getProperty( propertyName )
的方法,则可以处理该属性不存在的事件:
def getProperty ( propName ):
try:
return properties[propName]
except KeyError:
return "Something went wrong"
字典键处的值可以是任何类型。有关mroe的详细信息,请参见以下文档:https://docs.python.org/3/tutorial/datastructures.html#dictionaries