子类实现特定抽象属性时基类方法调用触发TypeError问题
问题分析与解决
你的代码存在两个关键错误,直接导致了TypeError异常:
子类未匹配基类的抽象属性定义
基类中specific_prop是被@property与@abc.abstractmethod共同装饰的抽象属性,但子类MySpecific里的specific_prop只是普通方法,未添加@property装饰器。这不仅不符合抽象基类的约束,还会导致基类访问self.specific_prop时出现类型不匹配的问题。错误地将属性当作方法调用
base_prop是用@property装饰的属性,访问时不需要加括号()。你写成myspec.base_prop(),相当于把base_prop返回的字符串当作函数去调用,自然会抛出“'str' object is not callable”的错误。
修正后的代码
import abc class MyBase(metaclass=abc.ABCMeta): @property @abc.abstractmethod def specific_prop(self): raise NotImplementedError @property def base_prop(self): return f'{self.specific_prop} CHZBRGR?' class MySpecific(MyBase): @property # 添加@property装饰器,匹配基类的抽象属性定义 def specific_prop(self): return "I CAN HAS " myspec = MySpecific() asd = myspec.base_prop # 直接访问属性,无需加括号 print(asd) # 输出:I CAN HAS CHZBRGR?
内容的提问来源于stack exchange,提问作者mrc
相关产品推荐
相关产品推荐

