2015-01-21 3 views
-1

Ниже не мой код, но код я должен работать с ...Как я могу получить доступ к значениям, хранящимся в родительском классе/объекте (python)?

class MediaRoot: 
    def __init__(self, type): 
    self.name = '' 
    self.year = None 
    self.type = type 
    self.parts = [] 
    self.subtitles = [] 
    self.thumbs = [] 
    self.arts = [] 
    self.trailers = [] 
    self.released_at = None 
    self.display_offset = 0 
    self.source = None 
    self.themes = [] 

class Movie(MediaRoot): 
    def __init__(self, name, year=None): 
    MediaRoot.__init__(self,'Movie') 
    self.name = name 
    self.year = year 
    self.guid = None 

Я объект с именем «СМИ» типа кино, и я могу работать с его именем и годом атрибутов и сделать все стандартные манипуляции. Я также знаю, что есть значение, которое хранится в «источнике», что я бы очень хотелось получить доступ, но всякий раз, когда я пытаюсь это дует на меня со следующей ошибкой:

File "/Users/john/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Versions/2/Python/Framework/api/agentkit.py", line 626, in __getattr__ 
    return object.__getattr__(self, name) 
AttributeError: type object 'object' has no attribute '__getattr__' 

Is этот атрибут только навсегда вне досягаемости?

+0

У вас есть пример кода, выполняющего доступ? Является ли код доступа внутри вашего плагина? – spirulence

+0

Объект передается в мой плагин с помощью механизма, который я не понимаю (новый для Python). Я просто делаю media.year или media.name, ничего необычного ... когда я пытаюсь использовать media.source, хотя это barfs. –

+0

@spirulence Интересно отметить, что я получаю ту же ошибку за атрибут, который, как я знаю, не существует ... поэтому, возможно, я ошибаюсь в характере объекта, который мне дал. –

ответ

0

Ваш объект MediaRoot не является подклассом из объекта и, таким образом, не имеет метода , например, как объекты Python. Попробуйте это:

class MediaRoot(object):

+0

Этот код выходит за рамки моего плагина. Я не могу изменить его ... –

+0

@JohnO, тогда вы должны сообщить ужасную ошибку «вверх по течению» тому, кто МОЖЕТ исправить ее, и объяснить вашему боссу или клиенту, почему ограничение того, что вы не можете исправить сломанный код, заставляют вас работать с невозможным решением. Назад, когда я провел несколько лет бесплатно, я освоил искусство доставки таких нежелательных сообщений! -) –

0

У вас есть ...:

class MediaRoot: 

в Python 2, если у вас нет __metaclass__ = type на глобальном уровне, это старый стиль класс (который никто не должен использовать больше) - это должно быть

class MediaRoot(object): 

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

Код в agentkit.py действительно показан в вашей трассе также проблематичен, но MediaRoot является классом старого стиля - это ваша первая проблема.

+0

У меня нет выбора в Python 2. Я работаю над плагином для Plex. Должны использовать все, что они используют. Мне даже нечего документировать, пришлось вырыть файл Media.py из комплекта, был удивлен, что я нашел его (хотя после этого все стало более понятным). –

+0

Python 2 в порядке, это то, что я использую ежедневно на работе, хотя Py 3 лучше. Но классы старого стиля просто сломаны: если вы не можете это исправить, вероятно, нет средств. –