如何在字典内部引用自身的项?Python代码AttributeError报错求助
解决AttributeError: 'Dialog' object has no attribute 'geometry'问题
你遇到的这个错误原因很明确:当你在构建geometry字典的时候,试图通过self.geometry['width']去访问width值,但这时候self.geometry还没有被赋值给你的Dialog实例——字典还在创建过程中,根本没绑定到self上,自然会报错说找不到这个属性。
另外先提个小笔误:你代码里height的判断写反了,kwargs['width'] if 'height' in kwargs else 170这里应该是kwargs['height'],不然不管有没有传height参数,都会取width的值,这肯定不是你想要的。
下面是修正后的代码,思路是先把width和height的取值单独存到局部变量里,再用这些变量构建geometry字典:
class Dialog: def __init__(self, **kwargs): # 先单独获取width和height,用get方法更简洁,还能避免KeyError width = kwargs.get('width', 300) height = kwargs.get('height', 170) # 现在直接用局部变量构建geometry,不需要访问还未创建的self.geometry self.geometry = { 'width': width, 'height': height, 'x': width / 2, 'y': height / 2 }
这样修改后,既解决了AttributeError的问题,也修正了height的笔误,同时用kwargs.get()替代了原来的if-else判断,代码更简洁健壮——如果kwargs里没有对应的key,get方法会直接返回默认值,不用手动判断key是否存在。
内容的提问来源于stack exchange,提问作者CrayZis
相关产品推荐
相关产品推荐

