是否可以在Python中创建具有未知属性的类?

时间:2018-07-31 18:33:46

标签: python python-3.x class parameters

我正在学习Python,而我刚结束学习该类的基础知识。这是我正在学习的第一种OOP语言,因此目前并不是所有事情都非常清楚。无论如何。


我想知道是否有可能在Python(3.6)中创建一个我们不知道一些对象属性的类(或者在许多可能的对象中只有2或3个)。

例如,假设您要通过分子的性质定义分子,以便可以在另一个程序中使用它们来建模或预测事物。您可以涉及的基本属性是(例如)test1TemperatureMolecularWeight。但是,您也可以使用20个不同的参数轻松定义分子。但是,其中的某些分子可能并非每个分子都存在,或者您目前可能不需要使用它们。 (即软件的第一个版本,...)。


问题:

我想知道Python 3.x中是否存在以下语法,以便该类能够准确创建分子具有的参数数量。我认为定义数以千计的分子不存在的变量将花费大量的存储空间。

MolarVolume

我的目标是使用文件.txt记录我的分子的属性(我有成千上万的分子),并按定义的顺序对它们的属性进行排序,以便在使用该类时,如果分子中的甲醇具有10个参数与前面提到的前三个相同,然后该类将按顺序创建具有十个属性的分子“甲醇”。


否则,如果不存在,我默认情况下是否应该创建一个具有所有参数的类,并根据情况将其中一些参数视为无用?还是使用更好的东西?

提前谢谢

2 个答案:

答案 0 :(得分:6)

您可以使用keyword argumentssetattr函数来做到这一点:

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