2015-01-21 48 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__' 

這是屬性只永遠夠不着?

+0

你有訪問代碼的例子嗎?您的插件中的訪問代碼是? – spirulence 2015-01-21 05:06:08

+0

該對象通過我不明白的機制(Python新手)傳遞到我的插件中。我只是做media.year或media.name,沒什麼奇怪的......當我嘗試media.source雖然它barf。 – 2015-01-21 05:16:48

+0

@spirulence有趣的是,我注意到,我得到了一個我知道不存在的attrib的同樣的錯誤...所以也許我誤解了我得到的對象的性質。 – 2015-01-21 05:19:23

回答

0

您的介質根對象不與子類的對象,因而不具備__getattr__方法像Python對象通常做。試試這個:

class MediaRoot(object):

+0

該代碼超出了我的插件範圍。我無法改變它... – 2015-01-21 04:58:00

+0

@JohnO,那麼你應該向可以修復它的人報告可疑錯誤「上游」,並向你的上司或客戶解釋爲什麼無法修復他們強迫你的破壞代碼的限制與解決方案合作是不可能的。回過頭來,當我花了幾年的時間,我已經掌握了傳遞這種不受歡迎的消息的藝術!) – 2015-01-21 05:02:53

0

你有...:

class MediaRoot: 

在Python 2,除非你有__metaclass__ = type在全球層面上,這是一個舊式類(任何人都不應) - 它需要是

class MediaRoot(object): 

如果如你所說,你不能解決這個錯誤,我不認爲有一種補救辦法。

回溯中實際顯示的agentkit.py中的代碼也存在問題,但MediaRoot是舊式課程是您的第一個問題。

+0

我沒有關於Python 2的選擇。我正在爲Plex開發一個插件。要使用他們使用的任何東西。我甚至沒有太多的文檔,不得不從文件夾中挖出Media.py文件,我很驚訝地發現它(儘管之後的事情開始變得更有意義)。 – 2015-01-21 04:57:21

+0

Python 2是好的,這是我每天在工作中使用的,儘管Py 3更好。但是老式的課程剛剛破裂:如果你不能解決這個問題,那麼可能沒有補救辦法。 – 2015-01-21 05:01:05

相關問題