Создание нескольких атрибутов и их имя - PullRequest
0 голосов
/ 26 января 2020

Я новичок в Python и пытаюсь создать класс с несколькими атрибутами. Я хотел бы получить доступ к атрибутам следующим образом:

measured_dataset.date
measured_dataset.temperature1
measured_dataset.temperature2

Атрибуты date, temperature1 и temperature2 будут переменными со списками:

measured_date = [1,2,3]
measured_dataset = dataset('date', measured_date)

I пытался создать класс вроде:

class dataset :

    def __init__(self, name, value = []) :

        self.name = name
        self.parameter = parameter

Но каким-то образом я могу создать только measured_dataset.name.

Как я могу создать то, что я хочу?

Ответы [ 2 ]

1 голос
/ 26 января 2020

Вы можете использовать свойства для определения «псевдонимов» вокруг существующих атрибутов.

class Dataset :

    def __init__(self, name, values) :
        self.name = name
        self.parameter = parameter

    @property
    def date(self):
        return self.parameter[0]

    @property
    def temperature1(self):
        return self.parameter[1]

    @property
    def temperature2(self):
        return self.parameter[2]

Однако кажется странным хранить значения в списке только потому, что вы предоставляете их в виде списка. __init__ может распаковать список и сохранить атрибуты напрямую:

class Dataset:
    def __init__(self, name, values):
        self.name = name
        self.date = values[0]
        self.temperature1 = values[1]
        self.temperature2 = values[2]

или даже лучше, сделать эти значения именованными параметрами равными __init__ и делегировать распаковку методу класса.

class Dataset:
    def __init__(self, name, date, temp1, temp2):
        self.name = name
        self.date = date
        self.temperature1 = temp1
        self.temperature2 = temp2

    @classmethod
    def from_list(cls, name, values):
        return Dataset(name, values[0], values[1], values[2])
0 голосов
/ 26 января 2020

Вы не можете назвать атрибуты класса одним способом, а затем попытаться получить их с другими именами. Вместо этого вы можете сделать это:

class Dataset :

    def __init__(self, date, temperature1, temperature2) :
        self.date = date
        self.temperature1 = temperature1
        self.temperature2 = temperature2

measrued_dataset = Dataset('2020-01-26', 100, 200)

И то же самое динамически (хотя вам следует избегать этого в общих случаях):

class Dataset:
    def __init__(self, **kwdargs):
        self.__dict__.update(kwdargs)

measrued_dataset = Dataset(date='2020-01-26', temperature1=100, temperature2=200)
...