2013-04-29 15 views
6
>>> print type(a) 
<type 'list'> 
>>> response.content = a 
>>> print type(response.content) 
<type 'str'> 

私はこの「魔法」を教えてください。 aはどのようにしてlistからstringに変換されますか?RESTレスポンスのコンテンツは「リスト」から「文字列」に「魔法のように」変換されます

responseは、rest_framework.response.Responseのインスタンスです。

+2

'some_object.some_variable'は' some_variable'と何が関係していますか?あなたはこれを少し良く説明できますか? – mgilson

+0

'type()'関数は文字列を返し、何も変換されません。 –

+1

'some_object'が禁じられたような魔法はありますか? –

答えて

8

このようなことが起こる可能性があります。最も一般的な理由は、response.contentが何らかの記述子として実装されている場合、このような面白いことが起こる可能性があります。 (このように動作する典型的な記述子は、propertyオブジェクトです)。この場合、プロパティのゲッターは文字列を返します。正式な例として:

class Foo(self): 
    def __init__(self): 
     self._x = 1 

    @property 
    def attribute_like(self): 
     return str(self._x) 

    @attribute_like.setter 
    def attribute_like(self,value): 
     self._x = value 

f = Foo() 
f.attribute_like = [1,2,3] 
print type(f.attribute_like) 
+4

https://github.com/django/django/blob/master/django/http/response.py#L282 – dm03514

+1

@ dm03514 - それで、私はそれに答えると思います。 :) – mgilson

関連する問題