উত্তর:
আপনি সত্যিই দুটি ভিন্ন জিনিস একসাথে মিশ্রিত করা হয়।
ব্যবহারের dir()
, vars()
বা inspect
মডিউল পেতে কি আপনি আগ্রহী (আমি ব্যবহার __builtins__
একটি উদাহরণ হিসাবে, তুমি কোন বস্তুর পরিবর্তে ব্যবহার করতে পারেন)।
>>> l = dir(__builtins__)
>>> d = __builtins__.__dict__
আপনার পছন্দসই অভিনব অভিধানটি মুদ্রণ করুন:
>>> print l
['ArithmeticError', 'AssertionError', 'AttributeError',...
অথবা
>>> from pprint import pprint
>>> pprint(l)
['ArithmeticError',
'AssertionError',
'AttributeError',
'BaseException',
'DeprecationWarning',
...
>>> pprint(d, indent=2)
{ 'ArithmeticError': <type 'exceptions.ArithmeticError'>,
'AssertionError': <type 'exceptions.AssertionError'>,
'AttributeError': <type 'exceptions.AttributeError'>,
...
'_': [ 'ArithmeticError',
'AssertionError',
'AttributeError',
'BaseException',
'DeprecationWarning',
...
ইন্টারেক্টিভ ডিবাগারে কমান্ড হিসাবে প্রিন্টিং প্রিন্টিং পাওয়া যায়:
(Pdb) pp vars()
{'__builtins__': {'ArithmeticError': <type 'exceptions.ArithmeticError'>,
'AssertionError': <type 'exceptions.AssertionError'>,
'AttributeError': <type 'exceptions.AttributeError'>,
'BaseException': <type 'exceptions.BaseException'>,
'BufferError': <type 'exceptions.BufferError'>,
...
'zip': <built-in function zip>},
'__file__': 'pass.py',
'__name__': '__main__'}
print re.compile(r'slots').search('No slots here either.').__slots__
inspect
আপনি নিজের উত্তরে মডিউল সম্পর্কে কেন বেশি কথা বলবেন না? আমি মনে করি এটি প্রিন্ট_আর বা ভার_ডাম্পের নিকটতম জিনিস।
dir()
তাহলে তালিকাভুক্ত বৈশিষ্ট্যগুলির পিছনে থাকা মানগুলি কীভাবে আপনি অ্যাক্সেস করবেন ? dir()
কেবলমাত্র নামেরগুলির একটি তালিকা ফেরত দেয়, এবং এগুলির সমস্তটিই vars()
বা __dict__
বৈশিষ্ট্যে বিদ্যমান নয় ।
আপনি vars()
মিশ্রিত করতে চান pprint()
:
from pprint import pprint
pprint(vars(your_object))
vars()
কেবল __dict__
তার আর্গুমেন্টটির রিটার্ন দেয় এবং dir()
কোনও __dir__
পদ্ধতি না থাকার ক্ষেত্রে এটিই ফ্যালব্যাক হয় । সুতরাং dir()
প্রথম জায়গায় ব্যবহার করুন , যেমনটি আমি বলেছি।
dir()
আপনাকে এমন সমস্ত বিল্ট ইন দেয় যা আপনাকে সম্ভবত পছন্দ __str__
এবং পছন্দ করে না __new__
। var()
না।
__dict__
বৈশিষ্ট্য নেই।
def dump(obj):
for attr in dir(obj):
print("obj.%s = %r" % (attr, getattr(obj, attr)))
সেখানে অনেকগুলি তৃতীয় পক্ষের ফাংশন রয়েছে যা তাদের লেখকের পছন্দ অনুসারে ব্যতিক্রম হ্যান্ডলিং, জাতীয় / বিশেষ চরিত্রের মুদ্রণ, নেস্টেড বস্তুগুলিতে পুনরাবৃত্তি করা ইত্যাদি জিনিস যুক্ত করে add তবে তারা সমস্তই মূলত এটিতে সিদ্ধ হয়।
getmembers()
স্ট্যান্ডার্ড inspect
মডিউলটিতে ফাংশনটি ব্যবহার করতে পারেন , তবে আমি ভেবেছিলাম এটি সাধারণভাবে অন্তর্নির্ধারণের কীভাবে করবেন তা চিত্রিত করে এটি এটি আরও কার্যকর হবে।
__dict__
(যেমন __doc__
এবং __module__
) তেমন পাওয়া যায় না । তদ্ব্যতীত, __dict__
ঘোষিত সামগ্রীর জন্য মোটেও কাজ করে না __slots__
। সাধারণভাবে, __dict__
ব্যবহারকারী-স্তরের বৈশিষ্ট্যগুলি দেখায় যা প্রকৃতপক্ষে অভ্যন্তরীণভাবে কোনও অভিধানে সঞ্চিত থাকে। dir () আরও দেখায়।
__dict__
বৈশিষ্ট্য / সদস্য থাকে না । আমি জানি এটি পাগল, তবে সত্য। মত বিল্ট-ইন int
এবং str
বা re.MatchObject
গুলি সাধারণ উদাহরণ। চেষ্টা করুন 'hello'.__dict__
, তারপরে চেষ্টা করুনdir('hello')
দির উল্লেখ করা হয়েছে, তবে এটি আপনাকে কেবল গুনের নাম দেবে। আপনি যদি তাদের মানগুলি চান তবে চেষ্টা করুন __ডিক্ট__।
class O:
def __init__ (self):
self.value = 3
o = O()
এখানে ফলাফল:
>>> o.__dict__
{'value': 3}
set
নেই __dict__
, তাই তাদের জন্য এটা ব্যর্থ হয়ে যাবেAttributeError: 'set' object has no attribute '__dict__'
এটি করতে আপনি "ডির ()" ফাংশনটি ব্যবহার করতে পারেন।
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdo
t__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder
, 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'exc_clear', 'exc_info'
'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval', 'getdefault
ncoding', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'getwindowsversion', 'he
version', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_
ache', 'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setprofile', 'setrecursionlimit
, 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoption
', 'winver']
>>>
আর একটি দরকারী বৈশিষ্ট্য হ'ল সহায়তা।
>>> help(sys)
Help on built-in module sys:
NAME
sys
FILE
(built-in)
MODULE DOCS
http://www.python.org/doc/current/lib/module-sys.html
DESCRIPTION
This module provides access to some objects used or maintained by the
interpreter and to functions that interact strongly with the interpreter.
Dynamic objects:
argv -- command line arguments; argv[0] is the script pathname if known
আপনি যে বস্তুর বর্তমান অবস্থা মুদ্রণ করতে পারেন:
>>> obj # in an interpreter
অথবা
print repr(obj) # in a script
অথবা
print obj
আপনার ক্লাস জন্য সংজ্ঞা __str__
বা __repr__
পদ্ধতি। থেকে পাইথন ডকুমেন্টেশন :
__repr__(self)
repr()
কোনও অবজেক্টের "অফিসিয়াল" স্ট্রিং উপস্থাপনা গণনা করার জন্য অন্তর্নির্মিত ফাংশন এবং স্ট্রিং রূপান্তরগুলি (বিপরীত উদ্ধৃতি) দ্বারা কল করা হয় । যদি কিছুটা সম্ভব হয় তবে এটি দেখতে একটি বৈধ পাইথন এক্সপ্রেশনের মতো হওয়া উচিত যা একই মান (উপযুক্ত পরিবেশের দিক দিয়ে) দিয়ে কোনও বস্তুটিকে পুনরায় তৈরি করতে ব্যবহার করা যেতে পারে। যদি এটি সম্ভব না হয় তবে "<... কিছু দরকারী বিবরণ ...>" ফর্মটির একটি স্ট্রিং ফিরে আসতে হবে। রিটার্ন মান অবশ্যই একটি স্ট্রিং অবজেক্ট হতে হবে। যদি কোনও শ্রেণি repr () সংজ্ঞায়িত করে তবে না__str__()
, তবে__repr__()
সেই শ্রেণীর উদাহরণগুলির "অনানুষ্ঠানিক" স্ট্রিং উপস্থাপনার প্রয়োজন হলে এটিও ব্যবহৃত হয়। এটি সাধারণত ডিবাগিংয়ের জন্য ব্যবহৃত হয়, সুতরাং এটি গুরুত্বপূর্ণ যে উপস্থাপনাটি তথ্য সমৃদ্ধ এবং দ্ব্যর্থহীন।
__str__(self)
str()
কোনও অবজেক্টের "অনানুষ্ঠানিক" স্ট্রিং প্রতিনিধিত্ব গণনা করার জন্য অন্তর্নির্মিত ফাংশন এবং মুদ্রণ বিবৃতি দ্বারা কল করা হয় । এটি এর থেকে পৃথক__repr__()
যে এটি একটি বৈধ পাইথন এক্সপ্রেশন হতে হবে না: পরিবর্তে আরও সুবিধাজনক বা সংক্ষিপ্ত উপস্থাপনা ব্যবহার করা যেতে পারে। রিটার্ন মান অবশ্যই একটি স্ট্রিং অবজেক্ট হতে হবে।
print "DEBUG: object value: " + repr(obj)
চেক আউট মূল্যবান হতে পারে -
পারেলের ডেটা :: ডাম্পারের সমান পাইথন রয়েছে?
আমার সুপারিশটি হ'ল -
https://gist.github.com/1071857
নোট করুন যে পার্লের ডেটা :: ডাম্পার নামে একটি মডিউল রয়েছে যা পার্ট সোর্স কোডে এনজেক্ট ডেটা অনুবাদ করে (এনবি: এটি কোডটি উত্সে ফিরে অনুবাদ করে না, এবং প্রায়শই আপনি আউটপুটটিতে অবজেক্ট পদ্ধতি ফাংশন করতে চান না)। এটি অধ্যবসায়ের জন্য ব্যবহার করা যেতে পারে তবে সাধারণ উদ্দেশ্য ডিবাগিংয়ের জন্য।
স্ট্যান্ডার্ড পাইথন প্রিন্টটি অর্জন করতে ব্যর্থ হয় এমন অনেকগুলি বিষয় রয়েছে, বিশেষত এটি কেবল কোনও অবজেক্টের উদাহরণ দেখলে অবতরণ বন্ধ করে দেয় এবং আপনাকে বস্তুর অভ্যন্তরীণ হেক্স পয়েন্টার দেয় (ত্রুটিযুক্ত, সেই পয়েন্টারটি পুরো ব্যবহার নয়) রাস্তা). সুতরাং সংক্ষেপে, অজগর সমস্ত কিছুই এই দুর্দান্ত অবজেক্ট ওরিয়েন্টেড দৃষ্টান্ত সম্পর্কে, তবে আপনি যে সরঞ্জামগুলি বাক্স থেকে বেরিয়ে আসবেন তা অবজেক্ট ছাড়া অন্য কিছু নিয়ে কাজ করার জন্য তৈরি করা হয়েছে।
পার্ল ডেটা :: ডাম্পার আপনাকে কতটা গভীরভাবে যেতে চান তা নিয়ন্ত্রণ করতে দেয় এবং বিজ্ঞপ্তিযুক্ত লিঙ্কযুক্ত কাঠামো সনাক্ত করে (এটি সত্যই গুরুত্বপূর্ণ)। এই প্রক্রিয়াটি পার্লকে অর্জন করা মৌলিকভাবে সহজ কারণ বস্তুর তাদের আশীর্বাদ ছাড়াই কোনও নির্দিষ্ট যাদু নেই (একটি সর্বজনীনভাবে সংজ্ঞায়িত প্রক্রিয়া)।
আমি ব্যবহার করার পরামর্শ দিচ্ছি help(your_object)
।
help(dir)
If called without an argument, return the names in the current scope. Else, return an alphabetized list of names comprising (some of) the attributes of the given object, and of attributes reachable from it. If the object supplies a method named __dir__, it will be used; otherwise the default dir() logic is used and returns: for a module object: the module's attributes. for a class object: its attributes, and recursively the attributes of its bases. for any other object: its attributes, its class's attributes, and recursively the attributes of its class's base classes.
help(vars)
Without arguments, equivalent to locals(). With an argument, equivalent to object.__dict__.
বেশিরভাগ ক্ষেত্রে, আপনি যে তথ্যটি চান তা ব্যবহার করে __dict__
বা dir()
পাবেন। যদি আপনার আরও বিশদ প্রয়োজন হয় তবে স্ট্যান্ডার্ড লাইব্রেরিতে পরিদর্শন মডিউল অন্তর্ভুক্ত রয়েছে , যা আপনাকে কিছু চিত্তাকর্ষক বিশদ পেতে দেয়। তথ্যের আসল কিছু স্নাতকের মধ্যে রয়েছে:
যদি আপনি কেবল "আমার অবজেক্টের কী বৈশিষ্ট্যের মান আছে?" অনুসন্ধান করছেন তবে সম্ভবত dir()
এবং __dict__
যথেষ্ট sufficient যদি আপনি সত্যিই স্বেচ্ছাচারিত বস্তুগুলির বর্তমান অবস্থার সন্ধান করতে চান (অজগরটিকে প্রায় সবই একটি বস্তু মনে করে) তবে inspect
তা বিবেচনার জন্য উপযুক্ত।
কোনও অবজেক্টের সমস্ত বর্তমান বৈশিষ্ট্য এবং মান মুদ্রণের জন্য কি কোনও অন্তর্নির্মিত ফাংশন রয়েছে?
না। সর্বাধিক উত্সাহিত উত্তরটি কিছু ধরণের বৈশিষ্ট্যকে বাদ দেয় এবং স্বীকৃত উত্তরটি দেখায় যে কীভাবে সমস্ত গুণাবলী পাওয়া যায়, পদ্ধতি এবং অ-পাবলিক এপিআইয়ের অংশগুলি সহ। তবে এর জন্য কোনও ভাল সম্পূর্ণ বিল্টইন ফাংশন নেই।
সুতরাং সংক্ষিপ্ত বিবরণটি হ'ল আপনি নিজের লেখা লিখতে পারেন তবে এটি বৈশিষ্ট্য এবং অন্যান্য গণনা করা ডেটা-বর্ণনাকারীদের গণনা করবে যা জনসাধারণের API এর অংশ, এবং আপনি এটি চান না:
from pprint import pprint
from inspect import getmembers
from types import FunctionType
def attributes(obj):
disallowed_names = {
name for name, value in getmembers(type(obj))
if isinstance(value, FunctionType)}
return {
name: getattr(obj, name) for name in dir(obj)
if name[0] != '_' and name not in disallowed_names and hasattr(obj, name)}
def print_attributes(obj):
pprint(attributes(obj))
বিভিন্ন শ্রেণীর ডেটা সদস্যদের সহ একটি শ্রেণিতে বর্তমানে শীর্ষে ভোট দেওয়া উত্তরের প্রয়োগটি পর্যবেক্ষণ করুন:
from pprint import pprint
class Obj:
__slots__ = 'foo', 'bar', '__dict__'
def __init__(self, baz):
self.foo = ''
self.bar = 0
self.baz = baz
@property
def quux(self):
return self.foo * self.bar
obj = Obj('baz')
pprint(vars(obj))
কেবল প্রিন্ট:
{'baz': 'baz'}
কারণ vars
কেবলমাত্র__dict__
কোনও অবজেক্টের রিটার্ন দেয় এবং এটি অনুলিপি হয় না, সুতরাং আপনি যদি ভার্সের মাধ্যমে ফিরে আসা ডিকটি সংশোধন করেন তবে আপনি __dict__
নিজেও অবজেক্টটির সংশোধন করছেন ।
vars(obj)['quux'] = 'WHAT?!'
vars(obj)
আয়:
{'baz': 'baz', 'quux': 'WHAT?!'}
- যা খারাপ কারণ কোয়াক্স এমন একটি সম্পত্তি যা আমাদের সেট করা উচিত নয় এবং নামস্থানে থাকা উচিত নয় ...
বর্তমানে গৃহীত উত্তরে (এবং অন্যদের) পরামর্শ প্রয়োগ করা আরও ভাল নয়:
>>> dir(obj)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slots__', '__str__', '__subclasshook__', 'bar', 'baz', 'foo', 'quux']
যেমনটি আমরা দেখতে পাচ্ছি, dir
কেবলমাত্র ফিরবে কোনও বস্তুর সাথে যুক্ত সমস্ত নাম (আসলে বেশিরভাগ ক্ষেত্রে) দেয় ।
inspect.getmembers
মন্তব্যে উল্লিখিত, একইভাবে ত্রুটিযুক্ত - এটি সমস্ত নাম ফেরত দেয় এবং মান প্রদান করে।
পড়ানোর সময় আমি আমার ছাত্রদের একটি ফাংশন তৈরি করি যা কোনও বস্তুর শব্দার্থগত পাবলিক এপিআই সরবরাহ করে:
def api(obj):
return [name for name in dir(obj) if name[0] != '_']
আমরা কোনও অবজেক্টের শব্দার্থক নেমস্পেসের একটি অনুলিপি সরবরাহ করতে এটি প্রসারিত করতে পারি , তবে আমাদের __slots__
নির্ধারিত নয় তা বাদ দিতে হবে এবং যদি আমরা "বর্তমান বৈশিষ্ট্যগুলি" অনুরোধটি গুরুত্ব সহকারে নিচ্ছি তবে আমাদের গণনা করা বৈশিষ্ট্যগুলি বাদ দিতে হবে (হিসাবে এগুলি ব্যয়বহুল হয়ে উঠতে পারে এবং "বর্তমান" না হিসাবে ব্যাখ্যা করা যেতে পারে):
from types import FunctionType
from inspect import getmembers
def attrs(obj):
disallowed_properties = {
name for name, value in getmembers(type(obj))
if isinstance(value, (property, FunctionType))}
return {
name: getattr(obj, name) for name in api(obj)
if name not in disallowed_properties and hasattr(obj, name)}
এবং এখন আমরা সম্পত্তিটি গণনা বা প্রদর্শন করি না, কোউক্স:
>>> attrs(obj)
{'bar': 0, 'baz': 'baz', 'foo': ''}
তবে সম্ভবত আমরা জানি আমাদের সম্পত্তি ব্যয়বহুল নয়। সেগুলিও অন্তর্ভুক্ত করার জন্য আমরা যুক্তিটি পরিবর্তন করতে চাই। এবং সম্ভবত আমরা এর পরিবর্তে অন্যান্য কাস্টম ডেটা বর্ণনাকারীদের বাদ দিতে চাই ।
তারপরে আমাদের আরও এই ক্রিয়াকে কাস্টমাইজ করতে হবে। এবং তাই এটি উপলব্ধি করে যে আমাদের কোনও বিল্ট-ইন ফাংশন থাকতে পারে না যা জাদুকরভাবে আমরা কী চাই তা জানে এবং এটি সরবরাহ করে। এটি আমাদের নিজের তৈরি করা কার্যকারিতা।
এমন কোনও অন্তর্নির্মিত ফাংশন নেই যা এটি করে এবং আপনার অবস্থার জন্য শব্দার্থগতভাবে উপযুক্ত এমনটি করা উচিত।
FunctionType
। তবে খুব সহায়ক - ধন্যবাদ!
একটি রূপক উদাহরণ যাদুর সাহায্যে ডাম্প অবজেক্ট :
$ বিড়াল ডাম্প.পি
#!/usr/bin/python
import sys
if len(sys.argv) > 2:
module, metaklass = sys.argv[1:3]
m = __import__(module, globals(), locals(), [metaklass])
__metaclass__ = getattr(m, metaklass)
class Data:
def __init__(self):
self.num = 38
self.lst = ['a','b','c']
self.str = 'spam'
dumps = lambda self: repr(self)
__str__ = lambda self: self.dumps()
data = Data()
print data
তর্ক ছাড়াই:
y পাইথন ডাম্প.পি
<__main__.Data instance at 0x00A052D8>
সঙ্গে মারেফাহ utils :
$ পাইথন ডাম্প.পি গ্নোসিস.ম্যাগিক মেটাএক্সএমএলপিক্লার
<?xml version="1.0"?>
<!DOCTYPE PyObject SYSTEM "PyObjects.dtd">
<PyObject module="__main__" class="Data" id="11038416">
<attr name="lst" type="list" id="11196136" >
<item type="string" value="a" />
<item type="string" value="b" />
<item type="string" value="c" />
</attr>
<attr name="num" type="numeric" value="38" />
<attr name="str" type="string" value="spam" />
</PyObject>
এটি কিছুটা পুরানো তবে এখনও কাজ করছে।
আপনি যদি এটি ডিবাগিংয়ের জন্য ব্যবহার করে থাকেন এবং আপনি কেবল সমস্ত কিছুর পুনরাবৃত্তি ডাম্প চান তবে স্বীকৃত উত্তরটি সন্তুষ্ট নয় কারণ এর জন্য আপনার ক্লাসগুলি __str__
ইতিমধ্যে ভাল বাস্তবায়ন করতে হবে। যদি এটি না হয় তবে এটি আরও ভাল কাজ করে:
import json
print(json.dumps(YOUR_OBJECT,
default=lambda obj: vars(obj),
indent=1))
TypeError: vars() argument must have __dict__ attribute
চেষ্টা ppretty
from ppretty import ppretty
class A(object):
s = 5
def __init__(self):
self._p = 8
@property
def foo(self):
return range(10)
print ppretty(A(), show_protected=True, show_static=True, show_properties=True)
আউটপুট:
__main__.A(_p = 8, foo = [0, 1, ..., 8, 9], s = 5)
এটি json বা yaml ইন্ডেন্টেড ফর্ম্যাটে পুনরাবৃত্তভাবে সমস্ত অবজেক্টের বিষয়বস্তু মুদ্রণ করে:
import jsonpickle # pip install jsonpickle
import json
import yaml # pip install pyyaml
serialized = jsonpickle.encode(obj, max_depth=2) # max_depth is optional
print json.dumps(json.loads(serialized), indent=4)
print yaml.dump(yaml.load(serialized), indent=4)
আমি উত্তরটি অগ্রাহ্য করেছি যা কেবলমাত্র প্রিন্টের উল্লেখ করে। পরিষ্কার হয়ে উঠতে, আপনি যদি কোনও জটিল ডেটা কাঠামোয় সমস্ত মান দেখতে চান তবে এর মতো কিছু করুন:
from pprint import pprint
pprint(my_var)
যেখানে my_var আপনার আগ্রহের পরিবর্তনশীল। আমি যখন ব্যবহার pprint(vars(my_var))
করি তখন আমার কাছে কিছুই পাওয়া যায় নি এবং অন্যান্য উত্তরগুলি এখানে সহায়তা করে না বা পদ্ধতিটি অযথা দীর্ঘ দেখায়। যাইহোক, আমার বিশেষ ক্ষেত্রে, আমি যে কোডটি পরিদর্শন করছিলাম তাতে অভিধানের একটি অভিধান ছিল।
মূল্যবান উল্লেখ করে যে কিছু কাস্টম শ্রেণীর সাথে আপনি কেবল একটি অস্বাস্থ্যকর <someobject.ExampleClass object at 0x7f739267f400>
ধরণের আউটপুট নিয়ে আসতে পারেন। __str__
সেক্ষেত্রে আপনাকে কোনও পদ্ধতি প্রয়োগ করতে হতে পারে , বা অন্যান্য সমাধানগুলির কয়েকটি চেষ্টা করতে পারেন । তৃতীয় পক্ষের লাইব্রেরি ছাড়াই আমি এমন কিছু সাধারণ সন্ধান করতে চাই যা সমস্ত পরিস্থিতিতে কাজ করে।
"মাইবজেক্ট" ডাম্প করতে:
from bson import json_util
import json
print(json.dumps(myObject, default=json_util.default, sort_keys=True, indent=4, separators=(',', ': ')))
আমি ভার () এবং দির () চেষ্টা করেছি; উভয়ই আমি যা খুঁজছিলাম তার জন্য ব্যর্থ। vars () কাজ করে না কারণ বস্তুটিতে __dict__ (ব্যতিক্রম রয়েছে। টাইপ এরিয়ার: ভারস () যুক্তিটিতে __dict__ বৈশিষ্ট্য থাকতে হবে)। dir () আমি যা খুঁজছিলাম তা ছিল না: এটি কেবল ক্ষেত্রের নামের তালিকা, মান বা বস্তুর কাঠামো দেয় না।
আমি মনে করি json.dumps () ডিফল্ট = json_util.default ব্যতীত বেশিরভাগ অবজেক্টের জন্য কাজ করবে তবে স্ট্যান্ডার্ড জসন সিরিয়ালাইজার ব্যর্থ হওয়ায় আমার অবজেক্টে ডেটটাইম ফিল্ড ছিল। পাইথনে "ডেটটাইম.ডেটটাইম জেএসএন সিরিয়ালাইজেবল নয়" কীভাবে কাটিয়ে উঠবেন দেখুন ?
কেন সাধারণ কিছু নয়:
for key,value in obj.__dict__.iteritems():
print key,value
for key,value in obj.__dict__.iteritems(): print key,value
?
প্রিন্টে আপনার ডেটা স্ট্রাকচারের নান্দনিকভাবে আনন্দদায়ক উপস্থাপনা তৈরি করার জন্য একটি " প্রিন্ট প্রিন্টার" রয়েছে। ফর্ম্যাটরটি এমন ডেটা স্ট্রাকচারের উপস্থাপনা তৈরি করে যা দোভাষী দ্বারা সঠিকভাবে পার্স করা যায় এবং একটি মানুষের পক্ষে পড়া সহজ হয়। যদি সম্ভব হয় তবে আউটপুটটি একটি একক লাইনে রাখা হয় এবং একাধিক লাইনের বিভাজনে ইন্ডেন্ট করা হয়।
শুধু বিপ্রিন্ট চেষ্টা করুন ।
এটি আপনাকে কেবল মুদ্রণের অবজেক্ট ভেরিয়েবলগুলিই নয়, পাশাপাশি সুন্দর আউটপুটও সহায়তা করবে:
class(NormalClassNewStyle):
dicts: {
},
lists: [],
static_props: 1,
tupl: (1, 2)
প্রত্যেকের সাথে লড়াই করা
vars()
সমস্ত বৈশিষ্ট্য ফিরে না। dir()
বৈশিষ্ট্যের মানগুলি ফেরত নানিম্নলিখিত কোডগুলি তাদের মানগুলির সাথে সমস্ত বৈশিষ্ট্য মুদ্রণ করে obj
:
for attr in dir(obj):
try:
print("obj.{} = {}".format(attr, getattr(obj, attr)))
except AttributeError:
print("obj.{} = ?".format(attr))
আপনি ফ্লাস্ক ডিবাগ সরঞ্জামদণ্ড ব্যবহার করে দেখতে পারেন।
https://pypi.python.org/pypi/Flask-DebugToolbar
from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
app = Flask(__name__)
# the toolbar is only enabled in debug mode:
app.debug = True
# set a 'SECRET_KEY' to enable the Flask session cookies
app.config['SECRET_KEY'] = '<replace with a secret key>'
toolbar = DebugToolbarExtension(app)
আপনার ভেরিয়েবলগুলি কীভাবে __init__ এর ভিতরে বা তার বাইরে শ্রেণীর মধ্যে সংজ্ঞায়িত করা যায় তা কার্যকর নয় works
your_obj = YourObj()
attrs_with_value = {attr: getattr(your_obj, attr) for attr in dir(your_obj)}
__dict__
সদস্য নেই (re.MatchObject
উদাহরণস্বরূপ), তবে বিল্টইনdir()
সমস্ত বস্তুর জন্য কাজ করে।