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

Par*_*aH2 5 python parameters class python-3.x

我正在学习Python,我刚学完该课程的基础知识.这是我学习的第一个OOP语言,所以目前并非一切都非常清晰.无论如何.


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

例如,假设您想要通过其属性定义分子,以便您可以在其他程序中使用它们来建模或预测事物.您可以涉及的基本属性(例如)Temperature,MolecularWeight和MolarVolume.但是,您也可以使用20个不同的参数轻松定义分子.但是,其中一些可能不存在于每个分子中,或者您现在可能不需要使用它们.(即软件的第一版,......).


问题:

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

class Molecule:

    def __init__(self, Temperature, MolecularWeight, MolarVolume, *properties):
        self.Temperature = Temperature
        self.MolecularWeight = MolecularWeight
        self.MolarVolume = MolarVolume
        self.*properties = *properties
Run Code Online (Sandbox Code Playgroud)

我的目标是使用文件.txt来记录我的分子的属性(我有数千个),它们的属性按照定义的顺序排序,这样当使用类时,如果对于分子甲醇我们有10个参数与第一个如前所述,然后该类将按顺序创建具有十个属性的分子"甲醇".


否则,如果它不存在,我应该默认创建一个包含我所有参数的类,并根据情况考虑其中一些没用吗?或者使用更好的东西存在?

先感谢您

Ale*_*lex 6

你可以通过使用关键字参数和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)
Run Code Online (Sandbox Code Playgroud)

我也按照惯例将你的变量名称为蛇.然后

m = Molecule(15, 7.5, 3.4, other_property=100)

m.other_property  # returns 100
Run Code Online (Sandbox Code Playgroud)