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 - 从类调用函数时出错[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python如何从类体内调用静态方法[重复]

Java - 从类中调用私有数组列表[重复]

从类中调用函数时抛出NullObjectReference

从 Dll 调用具有偏移地址的成员函数

PHP AJAX 12017 调用标头(位置:)时出错 [重复]

函数——基本语法,嵌套匿名高阶递归函数