t
Tarafından verilen özniteliklerin değerlerini nasıl belirler / alırsınız x
?
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
t = Test()
x = "attr1"
Yanıtlar:
df1
değişken, x = 'df1'
yani df1 var mı? df'nin şeklini böyle yazdırmak istiyorum getattr(x, 'shape')
veya getattr('df1', 'shape')
. Bunun getattr veya başka yöntemlerle yapılamayacağını biliyorum.
getattr(globals()[x], 'shape')
new
modülü kullanan Python 2 için geçerlidir .Setattr ve getattr'de yerleşik python işlevleri vardır. Bir sınıfın özniteliğini ayarlamak ve almak için kullanılabilir.
Kısa bir örnek:
>>> 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
Mantığı sınıfın içinde gizli tutmak istiyorsanız, aşağıdaki gibi genelleştirilmiş bir alıcı yöntemi kullanmayı tercih edebilirsiniz:
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)))
Çıktılar:
Attribute value of attr1 is 1
Onu daha iyi gizleyebilecek başka bir yaklaşım, sihirli yöntemi kullanmak olurdu __getattribute__
, ancak bu yöntemin içindeki öznitelik değerini almaya çalışırken çözemediğim sonsuz bir döngü elde etmeye devam ettim.
Ayrıca alternatif olarak kullanabileceğinizi unutmayın vars()
. Yukarıdaki örnekte, alışverişi olabilir getattr(self,varname)
tarafından return vars(self)[varname]
, ama getattr
verilen cevaba göre tercih olabilir arasındaki fark nedir vars
ve setattr
? .