You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子类实现特定抽象属性时基类方法调用触发TypeError问题

问题分析与解决

你的代码存在两个关键错误,直接导致了TypeError异常:

  1. 子类未匹配基类的抽象属性定义
    基类中specific_prop是被@property与@abc.abstractmethod共同装饰的抽象属性,但子类MySpecific里的specific_prop只是普通方法,未添加@property装饰器。这不仅不符合抽象基类的约束,还会导致基类访问self.specific_prop时出现类型不匹配的问题。

  2. 错误地将属性当作方法调用
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 19:58:10