経由でアクセスする場合は、最初にインスタンスの名前空間を確認する必要があるため、経由ClassName
ではなく経由でアクセスする方self
がわずかに高速です。self
しかし、それが重要であることを示唆するプロファイリング情報がない限り、違いがまったく重要であるとは思いません。
したがって、人間として読みやすく/理解しやすいと思われる方を使用することをお勧めします。
意味的には、class_variable_dict
変数がどこかで隠されている場合にのみ、それらは異なります。特に、(a)self
同じ名前の変数を定義している場合。または (b)self
が のサブクラスのインスタンスでありClassName
、そのサブクラス (または のサブクラスであるそのベースの 1 つClassName
) が同じ名前の変数を定義している。どちらも当てはまらない場合は、意味的に同一である必要があります。
編集:
delnamには良い点があります。いずれかを高速化する要因があります。非常にタイトなループでない限り、違いは些細なものであるという私の主張を支持します。それをテストするために、考えられる限り最もタイトなループを作成し、timeit
. 結果は次のとおりです。
- クラス変数経由のアクセス: 20.226 秒
- inst var 経由のアクセス: 23.121 秒
数回の実行に基づくと、エラー バーは約 1 秒のように見えます。つまり、これは統計的に有意な差ですが、おそらく心配する必要はありません。ここに私のテストコードがあります:
import timeit
setup='''
class A:
var = {}
def f1(self):
x = A.var
def f2(self):
x = self.var
a = A()
'''
print 'access via class var: %.3f' % timeit.timeit('a.f1()', setup=setup, number=100000000)
print 'access via inst var: %.3f' % timeit.timeit('a.f2()', setup=setup, number=100000000)