Мне нужно руководствоваться тем, как правильно настроить это для того, что я пытаюсь сделать. У меня есть класс под названием «Атрибут-блок», который я буду использовать для создания 3 или 4 блоков блока атрибутов. Как видно ниже ..., создавая новую копию класса python каждый раз, когда он называется
class AttributeBlock():
def __init__(self, key, label, isClosed, isRequired, attributes):
self.key = key
self.label = label
self.isClosed = isClosed
self.isRequired = isRequired
self.attributes = attributes if attributes is not None else {}
3 attributeBlock объекты
AttributeBlock(
key="Sphere",
isRequired=True,
attributes=[
''' Other class objects '''
BoolProperty("ishidden", False, "Hidden"),
]
)
AttributeBlock(
key="Box",
isRequired=True,
attributes=[
''' Other class objects '''
BoolProperty("ishidden", True, "Hidden"),
]
)
AttributeBlock(
key="Circle",
isRequired=False,
attributes=[
''' Other class objects '''
BoolProperty("ishidden", True, "Hidden"),
]
)
Что я тогда хочу сделать, это иметь возможность добавить один из этих AttributeBlocks на объект, убедившись, что, когда он добавил, его новый экземпляр AttributeBlock, поэтому его объекты вспомогательных атрибутов являются новыми экземплярами.
Это объект, в который я буду добавлять свои блоки атрибутов.
class ToyBox():
def __init__(self, name="", attributes=[]):
self.name = name
self.attributes = attributes[:]
newToyBox = ToyBox()
newToyBox.name = "Jimmy"
псевдокод
def add_attribute_block(toybox = None, key = ""):
if an AttributeBlock with the matching key exists:
add it to toybox.attributes
add_attribute_block(newToyBox, "Box")
print newToyBox
>>
ToyBox
name="Jimmy"
attributes=[
AttributeBlock(
key="Box",
isRequired=True,
attributes=[
BoolProperty("ishidden", True, "Hidden"),
]
),
AttributeBlock(
key="Sphere",
isRequired=True,
attributes=[
BoolProperty("ishidden", True, "Hidden"),
]
)
]
Это интересный подход. это хорошая практика или я должен создать более глобальную переменную, которая хранит все блоки атрибутов – JokerMartini
, - это их проблемы, о которых я должен знать при выполнении этого метода? похоже на отличное решение – JokerMartini
@JokerMartini: нет общего ответа. Если вы хотите отслеживать каждый атрибут AttributeBlock, интересен атрибут класса. Если вы хотите вместо этого иметь несколько независимых списков (подумайте о студентах в университете, что, если вы позже захотите иметь дело с разными университетами ...), вам лучше иметь внешний список и передать его в конструкторе. Как это часто бывает, это зависит от фактического использования. –