Python 为什么会产生错误消息AttributeError:';A';对象没有属性';f';
错误发生在具有的行上Python 为什么会产生错误消息AttributeError:';A';对象没有属性';f';,python,python-3.x,Python,Python 3.x,错误发生在具有的行上 class A: def __init__(self, x, y): self.x = x self.y = y def method(self): return A(self.x + 1, self.y + 1) def method2(self, f): if self.f().x > 3: return True a = A(1, 2) y =
class A:
def __init__(self, x, y):
self.x = x
self.y = y
def method(self):
return A(self.x + 1, self.y + 1)
def method2(self, f):
if self.f().x > 3:
return True
a = A(1, 2)
y = a.method2(a.method())
print(y)
我不明白为什么它说它没有属性也没有方法。让我们来看看对
a.method2
的调用
a.method()
。这将返回a
f
a.f
(通过self
),但f
是一个实例self.
,而是试图说A
的实例有一个属性,该属性也是A
的实例,但事实并非如此。它有效地做到了:
a.a(a.x+1,a.y+1).x
这会引起你的错误。是的,A
的实例具有属性x
,但是A
的实例没有与此新实例匹配的属性。还不完全清楚你想要完成什么。如果尝试在新实例上测试属性的值,则可以执行以下操作:
A类:
定义初始化(self,x
self.y=y
def方法(自我):
返回A(self.x+1,self.y+1)
def方法2(自身):
#只需检查值本身
如果self.x>3:
返回真值
其他:
返回错误
a=a(1,2)
#b是一个新实例,您不应该测试b的值
#通过a中的某个函数,因为实际上这个函数
#存在于所有实例中,包括b
b=a.方法()
#因此,请通过实例b检查b.x
b、 方法2()
错误的
问题在于混合使用“self.”和“f()”。method()返回的和method2()应该是类对象,因此您只需使用它就可以了
这样它就完美地工作了:
if self.f().x > 3:
因为方法是一个属性。为什么你认为
self.f()
会起作用?我写这段代码是为了帮助我理解OOP。我认为它会起作用,因为self.f()会引用self.method()然后返回一个新类,我想访问这个类的“x”实例属性。不清楚您为什么会这样想:1.访问a.f
会给您一个名为f的属性(请参阅);或2.访问a.method()
的值会是方法。为什么a.method()
的值会是“方法"如果它返回一个新类?嗯,没错,那么…为什么该方法中的f是一个表示self.f是self.method的值?!即使self.f神奇地使用了f的值,那也没有意义。你的期望对我来说完全是不合理的。谢谢你花时间回答这个问题,堆栈溢出对新程序员来说可能会非常苛刻。。。我想基本问题不应该在这里继续。这里有很多基本问题。有时候,问题看起来像是在问一件事,而问题的真正根源是这个项目的实际目标是什么。这就是为什么有很多你想做什么的问题。我们都从某个地方开始了,我们都创造了自己的目标自己的意大利面代码球。我记得我在这里的第一个问题,这是我如何学会向互联网寻求帮助可能会有点刺耳。不断改进,不断学习,不要害怕基本的问题。通常以前有人问过。快乐编码:)
class A:
def __init__(self, x, y):
self.x = x
self.y = y
def method(self):
return A(self.x + 1, self.y + 1)
def method2(self, f):
return f.x > 3
a = A(1, 2)
y = a.method2(a.method())
print(y)