def __repr__(self):
return '<%s %s (%s:%s) %s>' % (
self.__class__.__name__, self.urlconf_name, self.app_name,
self.namespace, self.regex.pattern)
この方法の重要性/目的は何ですか?
def __repr__(self):
return '<%s %s (%s:%s) %s>' % (
self.__class__.__name__, self.urlconf_name, self.app_name,
self.namespace, self.regex.pattern)
この方法の重要性/目的は何ですか?
回答:
__repr__オブジェクトの印刷可能な表現を返す必要があります。おそらく、このオブジェクトを作成する方法の1つです。こちらの公式ドキュメントをご覧ください。__repr__は__str__エンドユーザー向けであり、開発者向けです。
簡単な例:
>>> class Point:
... def __init__(self, x, y):
... self.x, self.y = x, y
... def __repr__(self):
... return 'Point(x=%s, y=%s)' % (self.x, self.y)
>>> p = Point(1, 2)
>>> p
Point(x=1, y=2)
__str__人間が読めるようになっているはずの出力です__repr__。Pythonインタープリターが読める表現になるはずです(つまり、インタープリターに文字列を渡すと、オブジェクトが再作成されます)。__str__ただし、オブジェクトにメソッドがない場合は、__repr__代わりに使用されます。述べたように、またこの例では、実際に印刷__str__する方法self.xとself.y:%rの代わりに使用されるべき%s動作をフォーマットストリングに(クラスが定義されていないので__str__、__repr__実際にとにかく戻され、それは異常です)。
これはPythonのドキュメントで非常によく説明されています:
repr(object):オブジェクトの印刷可能な表現を含む文字列を返します。これは、変換(逆引用符)によって得られる値と同じです。この操作に通常の関数としてアクセスできると便利な場合があります。多くのタイプの場合、この関数は、に渡されたときに同じ値を持つオブジェクトを生成する文字列を返そうとします
eval()。それ以外の場合、表現は、オブジェクトのタイプの名前と追加情報を含む山括弧で囲まれた文字列です。多くの場合、オブジェクトの名前とアドレスが含まれます。クラスは、__repr__()メソッドを定義することにより、この関数がインスタンスに対して返すものを制御できます。
したがって、ここに表示されているのはのデフォルトの実装であり__repr__、シリアル化とデバッグに役立ちます。
stackoverflowが、repr( 'stackoverflow')は'stackoverflow'です。
__repr__スタンドアロンのPythonインタプリタがクラスを印刷可能な形式で表示するために使用されます。例:
~> python3.5
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 5 2015, 21:12:44)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class StackOverflowDemo:
... def __init__(self):
... pass
... def __repr__(self):
... return '<StackOverflow demo object __repr__>'
...
>>> demo = StackOverflowDemo()
>>> demo
<StackOverflow demo object __repr__>
__str__メソッドがクラスで定義されていない場合は__repr__、印刷可能な表現を作成しようとして関数を呼び出します。
>>> str(demo)
'<StackOverflow demo object __repr__>'
さらに、print()クラスを呼び出すと__str__、デフォルトでが呼び出されます。
必要に応じて、ドキュメント
それらの違いを確認する例(私はこのソースからコピーしました)、
>>> x=4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y='stringy'
>>> repr(y)
"'stringy'"
>>> str(y)
'stringy'
との戻り値はrepr()とstr()同じですがint x、の戻り値には違いがあります。str y一方は正式なもので、もう一方は非公式です。公式表現と非公式表現の最も重要な違いの1つは、__repr__str値ののデフォルトの実装をevalへの引数として呼び出すことができ、戻り値が次のように有効な文字列オブジェクトになることです。
>>> repr(y)
"'a string'"
>>> y2=eval(repr(y))
>>> y==y2
True
の戻り値__str__をevalの引数として呼び出そうとすると、結果は無効になります。
クラスを定義して新しい型を作成する場合、Pythonの特定の機能を利用して、新しいクラスを使いやすくすることができます。これらの機能の1つは「特殊メソッド」であり、「マジックメソッド」とも呼ばれます。
特別なメソッドには、2つのアンダースコアで始まり、2つのアンダースコアで終わる名前があります。それらを定義しますが、通常、名前で直接呼び出すことはありません。代わりに、特定の状況下で自動的に実行されます。
printステートメントを使用してオブジェクトのインスタンスの値を出力できると便利です。これを行うときは、値をわかりやすい形式で出力に表示する必要があります。reprの特別な方法は、この現象が発生するように構成するために使用することができます。このメソッドを定義すると、このメソッドを定義したクラスのインスタンスの値を出力するときに、自動的に呼び出されます。ただし、同様の目的で使用されるstr特殊メソッドもあり、同じように定義されている場合、優先される可能性があります。
定義していない場合は、Point3Dクラスのreprメソッドで、my_pointをPoint3Dのインスタンスとしてインスタンス化してから、これを実行します...
出力my_point ...これは出力として表示される場合があります...
あまり良くないですね
したがって、より良い出力を得るために、reprまたはstr特殊メソッド、あるいはその両方を定義します。
**class Point3D(object):
def __init__(self,a,b,c):
self.x = a
self.y = b
self.z = c
def __repr__(self):
return "Point3D(%d, %d, %d)" % (self.x, self.y, self.z)
def __str__(self):
return "(%d, %d, %d)" % (self.x, self.y, self.z)
my_point = Point3D(1, 2, 3)
print my_point # __repr__ gets called automatically
print my_point # __str__ gets called automatically**
出力...
(1、2、3)(1、2、3)
実装するすべてのクラスにreprを実装します。言い訳はありません。読みやすさが曖昧さより重要であると考えるクラスにstrを実装します。
このリンクを参照してください:https : //www.pythoncentral.io/what-is-the-difference-between- str -and- repr -in-python /
>>> variable何__repr__()が返されるのかを知りたいですか?