Самый питонический способ доступа к «приватным» переменным из другого экземпляра класса - PullRequest
0 голосов
/ 03 августа 2011

Представьте себе следующий класс, который отображает какую-то иерархию:

class BaseList2D(object):
    def __init__(self):
        self._superobject   = None
        self._subobjects    = []

    def InsertUnder(self, other):
        if self not in other._subobjects:
            other._subobjects.append(self)
            self._superobject   = other
            return True
        return False

    def InsertAfter(self, other):
        parent  = other._superobject
        if not parent:
            return False

        parent  = parent._subobjects
        parent.insert(parent.index(other) + 1, self)
        return True

    def GetDown(self):
        if not len(self._subobjects):
            return
        return self._subobjects[0]

    def GetNext(self):
        if not self._superobject:
            return
        stree   = self._superobject._subobjects
        index   = stree.index(self)
        if index + 1 >= len(stree):
            return
        return stree[index + 1]

Действительно ли это лучший (или только ) способ установить суперобъект other путем доступа к его скрытому атрибуту? Атрибут не должен быть установлен пользователем ..

1 Ответ

1 голос
/ 03 августа 2011

_foo - это просто соглашение об именах. Обычно, есть свойство или что-то, что устанавливает переменную 'private' для вас. Если нет, то соглашение (слегка) используется неправильно.

...