Jawaban:
Ada fungsi built-in yang disebut getattr
dansetattr
getattr(object, attrname)
setattr(object, attrname, value)
Pada kasus ini
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1
, dan variabel x = 'df1'
yaitu df1 sebagai string di var x. saya ingin mencetak bentuk df seperti ini, getattr(x, 'shape')
atau getattr('df1', 'shape')
. Saya tahu ini tidak dapat dilakukan dengan getattr, metode lainnya.
getattr(globals()[x], 'shape')
new
modul yang sudah usang pada 2008 .Ada python yang dibangun di fungsi setattr dan getattr. Yang bisa digunakan untuk mengatur dan mendapatkan atribut suatu kelas.
Contoh singkat:
>>> from new import classobj
>>> obj = classobj('Test', (object,), {'attr1': int, 'attr2': int}) # Just created a class
>>> setattr(obj, 'attr1', 10)
>>> setattr(obj, 'attr2', 20)
>>> getattr(obj, 'attr1')
10
>>> getattr(obj, 'attr2')
20
Jika Anda ingin menyembunyikan logika di dalam kelas, Anda mungkin lebih suka menggunakan metode pengambil yang umum seperti:
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
def get(self,varname):
return getattr(self,varname)
t = Test()
x = "attr1"
print ("Attribute value of {0} is {1}".format(x, t.get(x)))
Output:
Attribute value of attr1 is 1
Apporach lain yang bisa menyembunyikannya lebih baik adalah menggunakan metode ajaib __getattribute__
, tetapi saya terus mendapatkan loop tanpa akhir yang tidak dapat saya selesaikan ketika mencoba untuk mendapatkan nilai atribut di dalam metode tersebut.
Perhatikan juga bahwa Anda dapat menggunakannya sebagai alternatif vars()
. Dalam contoh di atas, Anda dapat bertukar getattr(self,varname)
dengan return vars(self)[varname]
, tetapi getattr
mungkin lebih disukai sesuai dengan jawaban untuk Apa perbedaan antara vars
dan setattr
? .