我正在尝试创建一个函数,该函数调用由传递的参数确定的属性。
class room:
def __init__(self, length, bredth, depth):
self.length = length
self.bredth = bredth
self.depth = depth
def displaymeasurement(self, side):
print(self.side)
kitchen = room(10, 20, 15)
room.displaymeasurement("depth")
这是我正在使用的代码的抽象,因为它太复杂了。我努力将它与有问题的代码相匹配,它确实产生了相同的错误信息。
Traceback (most recent call last):
File "/home/townsend/Documents/PycharmProjects/untitled2/Test/inplicitreference.py", line 13, in <module>
room.displaymeasurement("depth")
File "/home/townsend/Documents/PycharmProjects/untitled2/Test/inplicitreference.py", line 8, in displaymeasurement
print(self.side)
AttributeError: 'shape' object has no attribute 'side'
我缺少哪种语法与计算机进行通信,以使用输入的参数side
替换depth
并从那里处理。
我花了几天时间搜索,但似乎无法找到类似构造的尝试。也许是因为我使用了不正确的术语。我对此很陌生。
我不希望这种方法有效,但我认为这是最好的说明方式。我尝试了几种不同的方法。
我知道一系列if
检查作为解决方案,但我确信这是一种更简单,更易扩展的解决方案。
def displaymeasurement(self, side):
if side == "length":
print(self.length)
if side == "bredth":
print(self.bredth)
if side == "depth":
print(self.depth)
答案 0 :(得分:0)
这是在对象的查找表中搜索成员的一种脆弱方式。 getattr()
仅适用于此用例。示例如下:
class MyClass(object):
def __init__(self):
self.x = 'foo'
self.y = 'bar'
myClass = MyClass()
try:
print(getattr(myClass, 'x'))
print(getattr(myClass, 'y'))
print(getattr(myClass, 'z'))
except AttributeError:
print 'Attribute not found.'
示例输出:
foo
bar
Attribute not found.
答案 1 :(得分:0)
您需要使用 getattr 内置方法。这允许您使用字符串搜索类的属性。
class Room:
def __init__(self, length, bredth, depth):
self.length = length
self.bredth = bredth
self.depth = depth
def displaymeasurement(self, side):
print(getattr(self, side))
kitchen = Room(10, 20, 15)
kitchen.displaymeasurement("depth")