通过参数引用对象的属性

时间:2017-03-13 18:42:49

标签: python python-3.x

我正在尝试创建一个函数,该函数调用由传递的参数确定的属性。

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)

2 个答案:

答案 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")