运行下面的代码时出现下面的属性错误。使用self访问类成员函数时,仍然会出现错误。
class A:
def __init__(self):
self.a=1
def f1(self):
self.b=2
def f2(self):
self.c=3
print(self.a,self.b,self.c)
self.f2()
model = A()
model.f1()错误:
AttributeError: 'A' object has no attribute 'f2'发布于 2017-12-19 04:08:01
A没有属性f2,但它有一个调用函数f2的属性f1。f2不是实例属性。
在这种情况下,c不再是实例属性,也不是数据属性,它现在只是一个局部变量。这可能是你想要的,也可能不是。
class D:
def __init__(self):
self.a = 1
def f1(self):
# Instance attribute declared outside of __init__
self.b = 2
def f2():
c = 3
print(self.a, self.b, c)
f2()根据开发环境的不同,您可能会收到关于在__init__函数外部声明实例属性的警告,也可能不会收到。您没有必要以这种方式声明它们,但是,它提高了可读性。
class B:
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
def f1(self):
def f2():
print(self.a, self.b, self.c)
f2()下一个代码块在it 所说的关于代码意图的中稍微更明确一些。
class A:
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
def f1(self):
def f2():
return '{} {} {}'.format(self.a, self.b, self.c)
return f2()您可能希望使用self参数的方法属性来调用f2(),在这种情况下:
class A2:
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
def f2(self):
print(self.a, self.b, self.c)
def f1(self):
"""Do something that requires calling the self.f2()
print function.
"""
self.f2()发布于 2017-12-19 02:38:24
调用嵌套函数时不需要self,也不需要包含在函数签名中:
class A:
def __init__(self):
self.a=1
def f1(self):
self.b=2
def f2():
c=3
print(self.a,self.b, c)
f2()
model = A()
model.f1()输出:
1, 2, 3发布于 2017-12-19 03:39:50
我不清楚你是否真的需要在一个方法中定义一个函数来调用它。
因此,您的代码可以很容易地如下所示:
class A:
def __init__(self):
self.a = 1
def f1(self):
self.b = 2
self.f2()
def f2(self):
self.c = 3
print(self.a, self.b, self.c)
model = A()
model.f1()输出:
1 2 3https://stackoverflow.com/questions/47874453
复制相似问题