আপনি প্রোগ্রামগতভাবে কোনও বৈশিষ্ট্য কীভাবে সেট করবেন?


204

ধরুন আমি একটি পাইথন বস্তু আছে xএবং একটি স্ট্রিং s, কিভাবে আমি অ্যাট্রিবিউট সেট করবেন sউপর x? তাই:

>>> x = SomeObject()
>>> attr = 'myAttr'
>>> # magic goes here
>>> x.myAttr
'magic'

যাদু কি? ঘটনাক্রমে এর লক্ষ্য হ'ল কলকে ক্যাশে করা x.__getattr__()

উত্তর:


288
setattr(x, attr, 'magic')

এটিতে সহায়তার জন্য:

>>> help(setattr)
Help on built-in function setattr in module __builtin__:

setattr(...)
    setattr(object, name, value)

    Set a named attribute on an object; setattr(x, 'y', v) is equivalent to
    ``x.y = v''.

সম্পাদনা করুন: তবে, আপনার নোট করা উচিত (একটি মন্তব্যে উল্লিখিত হিসাবে) যে আপনি এটি "খাঁটি" উদাহরণে করতে পারবেন না object। তবে সম্ভবত আপনার কাছে অবজেক্টের একটি সহজ সাবক্লাস রয়েছে যেখানে এটি দুর্দান্ত কাজ করবে। আমি ওপিকে দৃ strongly়ভাবে অনুরোধ করব যেন কখনও এর মতো বস্তুর নজির না ঘটে।


12
সাবধান, তবে, এটি আপনার দৃশ্যে কাজ করে না যেখানে আপনি কোনও অবজেক্টের (উদাহরণ) তৈরি করছেন।
এস .লট

3
একেবারে ঠিক, এটা হয় না। আমি সুবিধামত যে এড়ানো। আমি ওপিকে দৃ strongly়ভাবে অনুরোধ করব যেন কখনও এর মতো বস্তুর নজির না ঘটে।
আলী আফশার

2
অভিশাপ লজ্জা এটি সব ক্ষেত্রে কার্যকর হয় না, কারণ এটি সত্যই কার্যকর হবে যেমন উদাহরণস্বরূপ, dirtyব্যবহারকারীর
ইনপুটটিতে

1
@ ব্রাইস: প্রায় সব ক্ষেত্রেই সেটট্রা কাজ করে। দক্ষতা এবং অন্যান্য কারণে, 'অবজেক্ট' প্রোগ্রাম করা হয়েছে যাতে আপনি এতে অতিরিক্ত বৈশিষ্ট্য যুক্ত করতে না পারেন। আপনি __slots__গুণটি দিয়ে নিজের ক্লাসে এটি করতে পারেন ।
dirkjot

4
এটি intপাশাপাশি কাজ করে না । কেন আপনি ব্যাখ্যা করতে পারেন? (এটা কি সব __builtin__?
জেনস টিমারম্যান

53

সাধারণত, আমরা এর জন্য ক্লাস সংজ্ঞায়িত করি।

class XClass( object ):
   def __init__( self ):
       self.myAttr= None

x= XClass()
x.myAttr= 'magic'
x.myAttr

যাইহোক, যদি আপনি, কিছুদূর, এই দিয়ে কি করতে পারেন setattrএবং getattrফাংশন বিল্ট-ইন। তবে তারা objectসরাসরি উদাহরণগুলিতে কাজ করে না ।

>>> a= object()
>>> setattr( a, 'hi', 'mom' )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'hi'

তারা অবশ্য সব ধরণের সাধারণ ক্লাসে কাজ করে।

class YClass( object ):
    pass

y= YClass()
setattr( y, 'myAttr', 'magic' )
y.myAttr

25
এটি কেন বস্তুর উদাহরণগুলির সাথে কাজ করে না তার কোনও অন্তর্দৃষ্টি ()?
meawoppl


এখানে জিজ্ঞাসা ।
জালানব

1
আমি কি ক্লাসের পরিবর্তে মডিউলগুলি দিয়ে এটি করতে পারি?
বনোব

21

এক্সকে একটি বস্তু হতে দিন তবে আপনি এটি দুটি উপায়ে করতে পারেন

x.attr_name = s 
setattr(x, 'attr_name', s)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.