【问题标题】:Unresolved attribute error in PyCharmPyCharm 中未解决的属性错误
【发布时间】:2017-03-17 13:01:56
【问题描述】:

我创建了一个 python 类,例如:

class A():

    def foo(self):
        #Does something

def bar(self):
    #Does some work

A.bar = bar

根据我的理解,这应该在类中添加 bar。 但是当在不同的类中执行此操作时,我会收到提到的错误

global a

a=A()

a.bar() # this gives the error

谢谢。

【问题讨论】:

  • 我知道你可以对一个对象这样做,但对一个类也可以?我对此不太乐观。
  • @dabadaba 抱歉回复晚了,显然可以,请看this SO question和this我正在看的教程。此外,我已经使用同一类中的实例运行并验证了代码。
  • 但不一样,因为同名的方法已经存在。显然,如果未定义 A,您不能只将 bar(在外部函数中定义的新行为)分配给它。
  • @dabadaba 我相信这就是monkeypatching的作用,正如我在之前的评论中所说,如果所有内容都保存在同一个文件中,代码不会出错。

标签: python monkeypatching


【解决方案1】:

你的 bar 函数在课堂之外。更正一下:

class A():

    def foo(self):
        print('foo')

    def bar(self):
        print('bar')

global a
a = A()
a.bar()

【讨论】:

  • OP 所做的全部重点是将最初未分配给该类的函数分配给该类
  • 是的,正如@dabadaba 所说,我需要将实例和调用放在另一个类中。
  • 这段代码在我的系统上完美运行。没有未解决的属性错误,它使用 A.bar = bar 将方法添加到类中
猜你喜欢
  • 1970-01-01
  • 2020-02-27
  • 2017-06-27
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2021-10-02
  • 2016-09-28
  • 2021-04-21
相关资源
最近更新 更多