2016-10-26 35 views
0

私はbuildin関数をこのように置き換えることができることを知っています。 代入値を関数呼び出しに強制する

>>> import os 
>>> print(os.system) 
<built-in function system> 

>>> os.system = "a" 
>>> print(os.system) 
a 

何らかの理由で、私は直接ソースコードで os.systemを書き込むことはできません。それから私は getattrを試しました。しかし、それは動作しません。

>>> import os 
>>> print(getattr(os, "system")) 
<built-in function system> 

>>> getattr(os, "system") = "a" 
    File "<stdin>", line 1 
SyntaxError: can't assign to function call 

これは可能ですか?

+0

「os.systemをソースコードで直接書き込むことはできません」とはどういう意味ですか? – JETM

+0

@ JETM:私の目的のために、モジュール、クラス、または関数名を自分のコードにハードコードすることはできません。 –

答えて

3

getattrは、属性のみを取得します。また、エラーは、関数呼び出しが有効でないことを示しますassignment target。何をしたい

setattrです:

>>> import os 
>>> os_system = os.system 
>>> setattr(os, 'system', 'a') 
>>> getattr(os, 'system') 
'a' 
>>> setattr(os, 'system', os_system) 
>>> getattr(os, 'system') 
<built-in function system> 

私はあなたがこれを行うための十分な理由を持っている願っています。

+0

ありがとうございました。私はあなたが 'getattr'の実装についてもっと説明できることを願っています。関数に値を代入することを禁止する方法は? –

関連する問題