如何在Python类内部直接调用外部函数?解决NameError问题
问题分析与解决
错误原因
你遇到的NameError: name 'addition' is not defined是因为Python代码逐行解释执行:定义Student类时,类内部的顶层代码(不在任何方法里的addition(5,4))会立即执行,但此时addition函数还未定义(它在类的后面),解释器找不到该函数名,因此抛出错误。
你提供的运行结果大概率是代码顺序被调整过或之前已定义过addition函数导致的,原代码的顺序必然会触发该报错。
正确实现方式
方式1:将外部函数定义移到类的前面
如果需要在类定义阶段就调用外部函数,把函数定义放在类的上方即可,这样类加载时能找到该函数:
def addition(a,b): print("Addition is :",a+b) class Student: def __init__(self,name,age): self.name = name self.age = age def display(self): print("My name is :",self.name) print("My age is :",self.age) # 类定义时自动执行该调用 addition(5,4) s = Student('Ashok',22) s.display()
方式2:在类方法内部调用外部函数(更常用)
如果需要在创建实例或调用类方法时才执行外部函数,把函数调用放到类的方法(比如__init__、display)内部即可。此时即使函数定义在类后面也没问题,因为方法是在被调用时才执行,这时候函数已经被定义:
class Student: def __init__(self,name,age): self.name = name self.age = age def display(self): print("My name is :",self.name) print("My age is :",self.age) # 在方法内调用外部函数 addition(5,4) def addition(a,b): print("Addition is :",a+b) s = Student('Ashok',22) s.display()
两种方式的区别
- 方式1的函数调用会在类被定义时立即执行,无论是否创建类的实例。
- 方式2的函数调用仅在对应方法被调用时执行,能更灵活地控制调用时机,适合大多数业务场景。
内容的提问来源于stack exchange,提问作者MUKKARA ASHOK KUMAR REDDY
相关产品推荐
相关产品推荐

