接受虚线字符串的类似python`getattr`的函数

接受虚线字符串的类似python`getattr`的函数,python,oop,object,attributes,Python,Oop,Object,Attributes,我想实现一个类似于getattr的函数,但它将接受一个虚线字符串并遍历每个属性 def getattr_multiple_level(obj, attr_string): attr_names = attr_string.split('.') next_level = obj for attr_name in attr_names: next_level = getattr(next_level, attr_name) return next_le

我想实现一个类似于
getattr
的函数,但它将接受一个虚线字符串并遍历每个属性

def getattr_multiple_level(obj, attr_string):
    attr_names = attr_string.split('.')
    next_level = obj
    for attr_name in attr_names:
        next_level = getattr(next_level, attr_name)
    return next_level

class Test():
    def make_name(self, pre, suffix=""):
        return str(pre) + "_my_office_" + suffix


p = Test()
p.room = Test()
p.room.office = Test()

attr = getattr_multiple_level(p, 'room.office.make_name')
是否已经有一个内置的方法来实现这一点?或者,可以对上述代码进行哪些改进,以处理所有可能的异常和边缘情况?

是的,存在“内置方式”。您可以使用属性装饰器

结果:

grzegorz@grzegorz-GA-78LMT-USB3:~/tmp$ python3 propery_test.py 
ubik
Philip Kindred Dick
是的,有“内置方式”。您可以使用属性装饰器

结果:

grzegorz@grzegorz-GA-78LMT-USB3:~/tmp$ python3 propery_test.py 
ubik
Philip Kindred Dick