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__বস্তুর একটি মুদ্রণযোগ্য উপস্থাপনা, সম্ভবত ফেরত পাঠাবেন এক সম্ভাব্য উপায় এই বস্তুর তৈরি করতে। অফিসিয়াল ডকুমেন্টেশন দেখুন এখানে । __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__বলে মনে করা হয়: পাইথন ইন্টারপ্রেটারের (যেমন দোভাষীকে স্ট্রিং খাওয়ানো উচিত বস্তুটি পুনরায় তৈরি করা উচিত) এর জন্য একটি উপস্থাপনা পাঠযোগ্য। যদি কোনও অবজেক্টের কোনও __str__পদ্ধতি না থাকে তবে __repr__পরিবর্তে এটি ব্যবহৃত হয়। এছাড়াও যেমনটি উল্লেখ করা হয়েছে: এই উদাহরণটি আসলে __str__পদ্ধতিটি প্রিন্ট করে self.xএবং self.y: স্ট্রিং ফর্ম্যাটিং অপারেশনের %rপরিবর্তে ব্যবহার করা উচিত %s(যেহেতু ক্লাসটি সংজ্ঞায়িত করে না __str__, __repr__আসলে যাইহোক ফেরত দেওয়া হয়, তবে এটি একটি বিপরীতমুখী)।
পাইথন ডকুমেন্টেশনে এটি বেশ ভালভাবে ব্যাখ্যা করা হয়েছে :
repr ( অবজেক্ট ): কোনও বস্তুর মুদ্রণযোগ্য উপস্থাপনা সম্বলিত একটি স্ট্রিং ফিরিয়ে দিন। এটি রূপান্তর দ্বারা উত্পন্ন একই মান (বিপরীত উদ্ধৃতি)। সাধারণ ক্রিয়াকলাপ হিসাবে এই ক্রিয়াকলাপটি অ্যাক্সেস করতে সক্ষম হওয়া কখনও কখনও দরকারী। অনেক ধরণের ক্ষেত্রে, এই ফাংশনটি এমন একটি স্ট্রিং ফেরত দেওয়ার চেষ্টা করে যা পাস করার সময় একই মান সহ একটি বস্তু উত্পন্ন করবে
eval(), অন্যথায় উপস্থাপনাটি একটি কোণে বন্ধনীতে আবদ্ধ একটি স্ট্রিং যাতে এতে অতিরিক্ত তথ্যের সাথে অবজেক্টের ধরণের নাম যুক্ত থাকে is প্রায়শই বস্তুর নাম এবং ঠিকানা সহ including কোনও শ্রেণিটি কোনও__repr__()পদ্ধতি নির্ধারণ করে এই ফাংশনটি কীভাবে তার দৃষ্টান্তগুলির জন্য ফিরে আসে তা নিয়ন্ত্রণ করতে পারে ।
সুতরাং আপনি এখানে যা দেখছেন তা হ'ল ডিফল্ট বাস্তবায়ন __repr__যা সিরিয়ালাইজেশন এবং ডিবাগিংয়ের জন্য কার্যকর।
stackoverflowতবে রিপ্র ('স্ট্যাকওভারফ্লো') 'stackoverflow'।
__repr__একক পাইথন দোভাষী দ্বারা মুদ্রণযোগ্য ফর্ম্যাটে কোনও শ্রেণি প্রদর্শন করতে ব্যবহৃত হয়। উদাহরণ:
~> 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__করে ডিফল্টরূপে কল করবে ।
ডকুমেন্টেশন , আপনি দয়া করে
__Repr__ পদ্ধতি কেবল পাইথন বলে কিভাবে একটি বর্গ অবজেক্টের প্রিন্ট করতে
তাদের মধ্যে পার্থক্যগুলি দেখার একটি উদাহরণ (আমি এই উত্স থেকে অনুলিপি করেছি ),
>>> x=4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y='stringy'
>>> repr(y)
"'stringy'"
>>> str(y)
'stringy'
আয় repr()এবং str()জন্য অভিন্ন int x, কিন্তু বিনিময়ে মানের মধ্যে একটি পার্থক্য str y- এক আনুষ্ঠানিক এবং অন্যান্য হয় অনানুষ্ঠানিক । আনুষ্ঠানিক এবং অনানুষ্ঠানিক উপস্থাপনার মধ্যে অন্যতম গুরুত্বপূর্ণ পার্থক্য হ'ল __repr__একটি স্ট্র মানের জন্য ডিফল্ট বাস্তবায়নকে আর্গুমেন্ট হিসাবে আখ্যায়িত করা যেতে পারে এবং রিটার্ন মানটি একটি বৈধ স্ট্রিং অবজেক্ট হতে পারে:
>>> repr(y)
"'a string'"
>>> y2=eval(repr(y))
>>> y==y2
True
আপনি যদি রিটার্ন ভ্যালুটিকে __str__আর্গুমেন্ট হিসাবে প্রমাণ করার চেষ্টা করেন তবে ফলাফলটি বৈধ হবে না be
ক্লাসগুলি সংজ্ঞায়িত করে আমরা যখন নতুন প্রকার তৈরি করি, তখন নতুন ক্লাসগুলি ব্যবহারের সুবিধার্থে আমরা পাইথনের কয়েকটি বৈশিষ্ট্যের সুবিধা নিতে পারি। এই বৈশিষ্ট্যগুলির মধ্যে একটি হ'ল "বিশেষ পদ্ধতি", এটি "যাদু পদ্ধতি" হিসাবেও পরিচিত।
বিশেষ পদ্ধতিগুলির নাম রয়েছে যা শুরু হয় এবং দুটি আন্ডারস্কোর দিয়ে শেষ হয়। আমরা সেগুলি সংজ্ঞায়িত করি, তবে সাধারণত তাদের নাম হিসাবে সরাসরি কল করি না। পরিবর্তে, তারা নির্দিষ্ট পরিস্থিতিতে স্বয়ংক্রিয়ভাবে সম্পাদন করে।
মুদ্রণ বিবৃতি ব্যবহার করে কোনও বস্তুর উদাহরণের মান আউটপুট করতে সক্ষম হওয়া সুবিধাজনক। যখন আমরা এটি করি, আমরা মানটি আউটপুটে কিছু বোধগম্য দ্ব্যর্থহীন বিন্যাসে উপস্থাপন করতে চাই। Repr বিশেষ পদ্ধতি এই ঘটতে ব্যবস্থা ব্যবহার করা যেতে পারে। যদি আমরা এই পদ্ধতিটি সংজ্ঞায়িত করি তবে আমরা স্বয়ংক্রিয়ভাবে কল করতে পারি যখন আমরা কোনও ক্লাসের উদাহরণের মান প্রিন্ট করি তখন আমরা এই পদ্ধতিটি সংজ্ঞায়িত করেছি। এটি উল্লেখ করা উচিত, যদিও, সেখানে একটি স্ট্রিংও রয়েছে বিশেষ পদ্ধতি, একটি অনুরূপ জন্য ব্যবহৃত, কিন্তু না অভিন্ন উদ্দেশ্য, যে প্রাধান্য পেতে পারেন, যদি আমরা এটা সংজ্ঞায়িত করেছেন।
যদি আমরা সংজ্ঞায়িত না করি তবে repr Point3D বর্গ জন্য পদ্ধতি, এবং 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 প্রতি বর্গ আপনি বাস্তবায়ন জন্য। কোন অজুহাত থাকা উচিত। ক্লাসগুলির জন্য স্ট্রিম প্রয়োগ করুন যা আপনি মনে করেন যে পাঠযোগ্যতা অ-অস্পষ্টতার চেয়ে বেশি গুরুত্বপূর্ণ।
এই লিঙ্কটিটি দেখুন : https://www.pythoncentral.io/hat-is-the-differences-between- str -and- repr -in-python /
>>> variableকী কী মুদ্রণ করে__repr__()?