gpt4 book ai didi

python - 有没有一种更干净的Python方式来忽略对未初始化属性的调用?

转载 作者:行者123 更新时间:2023-12-01 01:53:27 31 4
gpt4 key购买 nike

我有一个类,在设置时在多个站使用,每个设置都会初始化一组不同的设备。举个例子,我支持的成像设备有:房子、汽车和自行车。

class Site():
def __init__(self, has_house, has_car, has_bike):
self.house = init_house() if has_house else None
self.car = init_car() if has_car else None
self.bike = init_bike() if has_bike else None

def switch_off(self):
if self.house:
self.house.switch_off()
if self.car:
self.car.switch_off()
if self.bike:
self.bike.switch_off()

现在,不必检查每个对象。我正在寻找一种方法来做这样的事情:

    def switch_off(self):
self.house.switch_off()
self.car.switch_off()
self.bike.switch_off()

我希望代码忽略未初始化的属性。有办法做到这一点吗?

最佳答案

您可以使用getattr:

def switch_off(self):
for i in self.__dict__.values():
getattr(i, 'switch_off', lambda :None)()

或者,为了清楚起见,没有循环:

def switch_off(self):
getattr(self.house, 'switch_off', lambda :None)()
getattr(self.car, 'switch_off', lambda :None)()
getattr(self.bike, 'switch_off', lambda :None)()

getattr 提供了传递可选的第三个参数的能力:如果传递的对象没有所需的属性,则返回值。在本例中,如果 housecarbikeNone,则 lambda > 将被返回并调用,而不是原始属性 switch_off

关于python - 有没有一种更干净的Python方式来忽略对未初始化属性的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50499949/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com