Вопрос:

Как определить группу связанных переменных в Python?

python

1345 просмотра

2 ответа

8898 Репутация автора

В JavaScript я люблю определять свои переменные в объектах, чтобы было ясно (по крайней мере для меня), что все его свойства связаны.

Например:

var box = {
  width: 100,
  height: 200,
  weight: 80
}

Есть ли способ сделать что-то подобное в Python?

Автор: Raphael Rafatpanah Источник Размещён: 09.02.2017 08:39

Ответы (2)


6 плюса

2111 Репутация автора

Это называется dict или словарь в Python, синтаксис практически идентичен:

box = {
  'width': 100,
  'height': 200,
  'weight': 80
}

позже вы можете получить доступ к этим значениям следующим образом:

box['width']
Автор: Nullman Размещён: 09.02.2017 08:46

1 плюс

4434 Репутация автора

Решение

Группировка с использованием словаря - это только один из способов сделать это. Если вам больше нравится a.bсинтаксис доступа к атрибутам, вы можете воспользоваться одним из следующих:

модуль

Вы можете сделать это с помощью модуля, например, поместить их в нечто с именем settings.py:

width = 100
height = 200
weight = 80

Тогда вы можете использовать это так:

import settings
area = settings.width * settings.height

Но модули в Python являются синглетонами, поэтому, если вы измените settings.widthв одном месте - это изменится во всех остальных.

Учебный класс

Также вы можете сделать группировку, используя атрибуты класса:

class Box:
    width = 100
    height = 200
    weight = 80

print(Box.width) # 100

# You could use instances to update attributes on separate instance
box = Box()
print(box.width) # 100
box.width = 10
print(box.width) # 10

# But their original values will still be saved on class attributes
print(Box.width) # 100

namedtuple

Другим вариантом является использование collections.namedtuple.

from collections import namedtuple

Box = namedtuple('Box', ('width', 'height', 'weight'))
box = Box(100, 200, 80)
print(box.width) # 100

# Tuples are immutable, so this is more like a way to group constants
box.width = 10 # AttributeError: can't set attribute
Автор: Bunyk Размещён: 09.08.2019 09:39
Вопросы из категории :
32x32