คุณจะตั้งค่า / รับค่าคุณลักษณะของที่t
กำหนดโดยได้x
อย่างไร?
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
t = Test()
x = "attr1"
คุณจะตั้งค่า / รับค่าคุณลักษณะของที่t
กำหนดโดยได้x
อย่างไร?
class Test:
def __init__(self):
self.attr1 = 1
self.attr2 = 2
t = Test()
x = "attr1"
คำตอบ:
มีฟังก์ชั่นในตัวที่เรียกว่าgetattr
และsetattr
getattr(object, attrname)
setattr(object, attrname, value)
ในกรณีนี้
x = getattr(t, 'attr1')
setattr(t, 'attr1', 21)
df1
และตัวแปรx = 'df1'
เช่น df1 เป็นสตริงใน var x ฉันต้องการที่จะพิมพ์รูปทรงของ DF เช่นนี้หรือgetattr(x, 'shape')
getattr('df1', 'shape')
ฉันรู้ว่าสิ่งนี้ไม่สามารถทำได้ด้วย getattr วิธีอื่นใด
new
โมดูลที่ถูกเลิกใช้ในปี 2008มีไพ ธ อนฟังก์ชั่น setattr และ getattr ซึ่งสามารถใช้ในการตั้งค่าและรับคุณลักษณะของคลาส
ตัวอย่างสั้น ๆ :
>>> 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
หากคุณต้องการซ่อนตรรกะไว้ในชั้นเรียนคุณอาจต้องการใช้วิธีการทะเยอทะยานทั่วไปเช่น:
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)))
ขาออก:
Attribute value of attr1 is 1
apporach อื่นที่สามารถซ่อนได้ดียิ่งขึ้นจะใช้วิธีเวทย์มนตร์__getattribute__
แต่ฉันยังคงวนซ้ำไม่รู้จบซึ่งฉันไม่สามารถแก้ไขได้เมื่อพยายามดึงค่าคุณลักษณะในวิธีนั้น
โปรดทราบว่าคุณสามารถใช้อีกวิธีหนึ่งvars()
ได้ ในตัวอย่างข้างต้นคุณสามารถแลกเปลี่ยนgetattr(self,varname)
โดยreturn vars(self)[varname]
แต่getattr
อาจจะดีกว่าตามคำตอบของอะไรคือความแตกต่างระหว่างvars
และsetattr
? .