python error “object is not callable“ 分析解决

最近在学习python相关的东西,查看别人的代码,有很多地方看不太懂,就写了一些简单的代码来debug 这个调用类的实例化的逻辑
下面写了两个文件
Inherit_test_head.py

class Animal:
    def Init(self):
        pass
    def __init__(self, raiseError=False):
        self.A="I'M A"
        self.B="I'M B"
        self._initPer()
        print(self.A,self.B)

    def _initPer(self):
        self.p=CParameter("p")
        self.p.k="PK"
        print(self.p.k)
    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Dog(Animal):
    def Header():
        print("Enter hearder")
    def speak(self):
        return "Woof!"
    
        
class CParameter:

    def __init__(self, name, nameUnique = None):
        # Attention: because we changed __setattr__ it is
        print("Enter Cparameter")
TDog=Dog()

主程序
Inherit_test.py

import Inherit_test_head
class Person:
    def __init__(self, name):
        self.name = name
        print(self.name)

    def greet(self, animal):
        return f"Hello, {self.name} says {animal.name}: {animal.speak()}"
    def Main(self):
        Inherit_test_head.TDog("I am a pink dog")
       



# 创建一个Person实例
my_person = Person("Alice")

运行Inherit_test.py 结果如下:
因为import的文件里面定义了一个类的对象,因此会调用Animal 类的构造函数进行一些初始化操作在这里插入图片描述
修改主程序 Inherit_test.py,创建一个类调用主程序中的Main函数


import Inherit_test_head
class Person:
    def __init__(self, name):
        self.name = name
        print(self.name)

    def greet(self, animal):
        return f"Hello, {self.name} says {animal.name}: {animal.speak()}"
    def Main(self):
        Inherit_test_head.TDog("I am a pink dog")
    



# 创建一个Person实例
my_person = Person("Alice")
my_person.Main()

会报错,因为Main函数里面调用了一个类的实例
在这里插入图片描述
当类中没有特殊函数call时,类的实例不可被调用,当有了call函数,则在调用类的实例的时候会执行call 函数中的内容
因此,修改Inherit_test_head.py 函数
增加call函数如下,可以输出Inherit_test_head.TDog(“I am a pink dog”) 中传入的值

    def __call__(self,value):
        print("call back")
        print(value)
class Animal:
    def Init(self):
        pass
    def __init__(self, raiseError=False):
        self.A="I'M A"
        self.B="I'M B"
        self._initPer()
        print(self.A,self.B)

    def _initPer(self):
        self.p=CParameter("p")
        self.p.k="PK"
        print(self.p.k)
    def __call__(self,value):
        print("call back")
        print(value)
    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Dog(Animal):
    def Header():
        print("Enter hearder")
    def speak(self):
        return "Woof!"
    
        
class CParameter:

    def __init__(self, name, nameUnique = None):
        # Attention: because we changed __setattr__ it is
        print("Enter Cparameter")
TDog=Dog()

执行结果如下:
在这里插入图片描述

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值