Структура / переменные поля с помощью Python

#python #matlab

#python #matlab

Вопрос:

Я хотел бы знать, возможно ли создавать переменные структуры и их соответствующие поля в Python, как это возможно в MATLAB.

Например: я хочу создать переменную структуры с именем человека и его характеристиками в виде полей:

 John.name = 'John'
John.age = 30
John.sex = 'Male'
John.height = 1.85
John.weight = 85
  

Затем я выполню некоторые операции с этими переменными, например, проверю, старше ли Джону 18:

 if John.age > 18: ....
  

Ответ №1:

Структуры в python отсутствуют, поскольку все рассматривается как объект.

Мое лучшее предложение — создать класс для того, для чего вы изначально предназначали структуру. Что-то похожее на:

 class Person:
  def __init__(self, name, age, height, weight):
    self.name = name
    self.age = age
    self.height = height
    self.weight = weight

# creating the object
john = Person('John', 20, 184, 75)

# Accessing the fields

if john.age > 18:
  ...
  

В качестве альтернативы вы могли бы использовать словарь

 
John = {}

# setting a field
John['age'] = 20

# using a field
if John['age'] > 18:
  ...

  

Ответ №2:

Существуют различные конструкции, которые вы можете использовать, и какая из них наиболее подходит, зависит от того, что именно вы собираетесь с ней делать. В приведенном вами примере и при условии, что значения атрибутов не меняются, namedtuple может быть хорошим кандидатом здесь:

 from collections import namedtuple

Person = namedtuple("Person", ["name", "age", "sex", "height", "weight"])

John = Person("John", 30, "Male", 1.85, 85)

if John.age > 18:
    ...

  

Ответ №3:

Вы также можете использовать классы для реализации struct.

 class Person:
    def __init__(self, **kwargs):
        for i in kwargs:
            setattr(self, i, kwargs[i])

john = Person(name="John", age=30)
print(john.name, john.age)  # John 30
  

Ответ №4:

вы можете использовать словари, например

 John = {
'name'   :  'John'
'age'    :  30
'sex'    :  'Male'
'height' :  1.85
'weight' :  85
}

if John['age'] > 18:
    print('older than 18')
  

или другим способом вы можете использовать ООП «Объективно ориентированное программирование», например:

     #creation class with name person:
    class person:

        #define init function to initialize main variables:
        def __init__(self, name, age,sex,height,weight):

            #define main variables you want to store and use
            self.name    = name
            self.age     = age
            self.sex     = sex
            self.height  = height
            self.weight  = weight
    
    #using class to store data you  want:
    John = person('John',30,'Male',1.85,85)
    Mario = person('Mario',25,'Male',1.90,80)

    #using data you stored:
    print(John.name)
    print(John.age)
    print(Mario.sex)
    
    #and your example is ready
    if John.age > 18: ....