কোনও বস্তুর __ডিক্ট__ এর সংশোধন করা কি তার বৈশিষ্ট্যগুলিকে পাইথোনিক হিসাবে বিবেচনা করার জন্য সেট করে?


12

আমার একটি ক্লাস রয়েছে যা একটি ডাটাবেসে পাওয়া সারিগুলি থেকে বস্তুগুলিকে স্ফীত করে (বা অন্য উত্স, যেমন: মোঙ্গোডিবি, একটি সিএসভি ফাইল, ইত্যাদি)। বস্তুর বৈশিষ্ট্যগুলি সেট করতে, এটি কিছু self.__dict__.update(**properties)বা কিছু করে obj.__dict__.update(**properties)

এটি কি পাইথোনিক হিসাবে বিবেচিত? এটি কি একটি ভাল ধাঁচ যা আমার ব্যবহার করা চালিয়ে যাওয়া উচিত, বা এটি খারাপ ফর্ম হিসাবে বিবেচিত হয়?


1
আমি জানি না এটি পাইথোনিক কিনা, তবে এটি অবশ্যই খুব সাধারণভাবে এটি সাধারণভাবে করা উচিত d
ব্যবহারকারী16764

উত্তর:


10

পাইথন ৩.৩-তে একটি নতুন প্রকার যুক্ত করা হয়েছিল types.SimpleNamespace()এবং নথিতে এটি বর্ণিত হয়েছে:

প্রকারটি নিম্নলিখিত কোডের সাথে মোটামুটি সমান:

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)
    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))

__init__প্রকারের পদ্ধতিটি নোট করুন ; পাইথন ডকুমেন্টেশনের চেয়ে আপনি কৌশলটির আরও ভাল সমর্থন পেতে পারেন না।


যদিও SimpleNamespaceএটি বেশিরভাগ ধরণের থেকে একেবারেই আলাদা কারণ এতে কোনও নির্দিষ্ট বৈশিষ্ট্যের সেট নেই।

7
আচ্ছা, পাইথন ডকুমেন্টেশনের বিষয়ে ডকোস.পিথোন.আর. / ২ / লিবারি / স্টডিটিপস html থেকে "" প্রতিটি মডিউলের একটি বিশেষ বৈশিষ্ট্য __dict__এটি the এটি মডিউলটির প্রতীক টেবিল সম্বলিত অভিধান। এই অভিধানটি সংশোধন করা আসলে মডিউলটির প্রতীককে পরিবর্তন করবে টেবিল, তবে __dict__বৈশিষ্ট্যে সরাসরি অ্যাসাইনমেন্ট সম্ভব নয় (আপনি লিখতে পারেন m.__dict__['a'] = 1যা m.a1 হিসাবে সংজ্ঞায়িত করা যায় তবে আপনি পারবেন না writem.__dict__ = {}) সরাসরি সংশোধন __dict__করার পরামর্শ দেওয়া হয় না , "যা প্রাথমিকভাবে আমাকে এই প্রশ্ন জিজ্ঞাসা করার জন্য অনুরোধ করেছিল।
স্কাইলার

@ স্কাইলার: নোট করুন যে কেবলমাত্র মডিউল নামস্থান উল্লেখ করে । globals()ফাংশন একই নামস্থান ফেরৎ, এবং পরিবর্তনশীল সাবধানবাণী globals সেটিং, অত চেয়ে সমস্যার সমাধানের সাধারণত ভাল উপায় আছে।
মার্টিজান পিটারস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.