2016-09-18 61 views
2
class CIFAR10Record(object): 
    pass 

result = CIFAR10Record() 
result.height = 32 
result.width = 32 
result.depth = 3 

這段代碼創建一個類及其實例。在Python中以這種方式創建類和實例有哪些優缺點?

這種模式的優點和缺點是什麼?

+0

「這樣」你是指從外部分配實例的變量?沒關係,只要這些成員變量也初始化爲'__init__'中的某個成員變量,否則很難理解哪些成員變量存在。我不會說它有「優勢」。順便說一下,你的縮進是錯誤的。 – zvone

回答

4

此代碼使用一個類爲了「聚集」一些相關的領域。

優點是它非常靈活。該類沒有任何成員。任何函數都可以決定添加哪些字段。不同的調用可以創建這個類的對象,並以不同的方式填充它們(所以,同時,您可以擁有與不同成員相同類的對象)。

這種靈活性也是一個騙局。這缺乏結構:查看代碼並確定類將具有哪些成員更困難。獲得這樣一個對象並且迭代成員也不那麼簡單。最後,這個班級是一個極端的例子,沒有encapsulation


總之,我認爲有更好的選擇:

如果確實需要這種靈活性(這本身就是一個問題),你可能要考慮使用dict代替。

result = {} 
result['height'] = 32 
result['width'] = 32 
result['depth'] = 3 

這是更清晰這裏(恕我直言),其結果僅僅是字段的分組,而且更容易遍歷使用dict's methods領域。

如果不需要這種靈活性,並且它只是一種最小化代碼量的方法,則應該考慮使用collections.namedtuple

import collections 

CIFAR10Record = collections.namedtuple('CIFAR10Record', ['height', 'width', 'depth']) 
+0

謝謝你回答我的問題! – jiuses

+0

@jiuses不客氣。祝你好運。 –

相關問題