Python - 从类调用函数时出错[重复]
Posted
技术标签:
【中文标题】Python - 从类调用函数时出错[重复]【英文标题】:Python - error in calling a function from a class [duplicate] 【发布时间】:2021-01-19 19:29:36 【问题描述】:我正在尝试使用我的同事之前已经成功运行过的代码。
但是,当我尝试复制这种情况时,我得到了一个错误。 情况如下:
类和函数定义为:
Class X:
def f1(self, params)
...
def f2(self, params)
...
Class Y(X):
def f3(self, params..)
...
def G(self, params):
... so on
所有这些都保存在笔记本的“classes.py”文件下。
因此,从我的 jupyter 笔记本中,我尝试将函数 G() 调用为:
import classes
X.G(params)
现在我收到如下错误:
" name 'X' is not defined "
我也试过这样打电话:Y.G(params)
并得到类似的错误,如名称 Y 未定义。
我相信,代码没有错误,因为它之前已经运行过。
谁能解释这里可能出现的问题。
另外,我不明白Class Y(X)
的行定义。
我的假设是,Y 类是主要 X 类的子类。
但是,无论如何,一些见解是有帮助的。
谢谢
【问题讨论】:
你为什么在X
中定义f()
两次?
如果你导入类,那么 X 可以作为 classes.X
用“classes.X”替换“X”来解决这个问题。
更好的做法是去from classes import X, Y
@MattDMo f() 应该是 f1(), f2() 等等...我会尝试这些方法。谢谢
【参考方案1】:
class X:
def print_a(self):
print('a')
def print_b(self):
print('b')
class Y(X):
def print_a(self):
print('overriden print a from class X')
instance = Y()
instance.print_a()
返回
从类 X 中重写打印一个
当您在另一个类中继承一个类时,您可以使用继承类的功能、添加其他功能,甚至覆盖功能。
编辑:
既然你import classes
你的声明应该看起来像
import classes
instance = classes.Y() #You should call a method from an instance of the class:
instance.G() #and the call the method:
Python class inheritance.
【讨论】:
@wwii 现在答案是否涵盖了您的问题?【参考方案2】:您收到name X is not defined
错误,因为X
尚未定义。如果您使用from classes import X
或以classes.X()
访问它,它将可用。此外,您通常希望命名一个类的实例化
foo = classes.X()
例如。
【讨论】:
以上是关于Python - 从类调用函数时出错[重复]的主要内容,如果未能解决你的问题,请参考以下文章