class 中定义的函数在我使用时未被识别为已定义
Defined functions inside a class are not recognized as defined when I use them
我有这段代码,但是当我尝试使用重新定义的 str 函数时,它没有打印任何内容,更重要的是,名为 "cuadrant" 的已定义函数无法正常工作不是根据python定义的,而是:
class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y
print('The point ({},{}) has been created'.format(self.x, self.y))
def __del__(self):
print('The point ({},{}) has been deleted or overwritten'.format(self.x, self.y))
def __str__(self):
return '({},{})'.format(self.x, self.y)
def cuadrant(self):
if self.x > 0 and self.y > 0:
return '1st Cuadrant'
elif self.x < 0 and self.y > 0:
return '2nd Cuadrant'
elif self.x < 0 and self.y < 0:
return '3rd Cuadrant'
elif self.x >0 and self.y < 0:
return '4th Cuadrant'
else:
return 'Original Point'
A = Point(4, 5)
B = Point(8, 9)
str(A)
str(B)
cuadrant(A)
cuadrant(B)
我收到的错误信息是:
runfile('C:/Users/Jorge87/Desktop/Master Tema 1.5/prueba.py', wdir='C:/Users/Jorge87/Desktop/Master
Tema 1.5')
The point (4,5) has been created
The point (8,9) has been created
Traceback (most recent call last):
File "<ipython-input-9-16e5df591861>", line 1, in <module>
runfile('C:/Users/Jorge87/Desktop/Master Tema 1.5/prueba.py', wdir='C:/Users/Jorge87/Desktop/Master
Tema 1.5')
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line
827, in runfile
execfile(filename, namespace)
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line
110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Jorge87/Desktop/Master Tema 1.5/prueba.py", line 38, in <module>
cuadrant(A)
NameError: name 'cuadrant' is not defined
看来您误解了方法的概念。在 python 中,使用点从对象调用方法,即 A.cuadrant() -- Good,cuadrant(A) -- Bad.
编辑 #1:我应该提到,在某些语言中,例如 c++,可以使用 class 的命名空间调用方法并将指向对象的指针作为第一个参数
编辑 #2:从评论和编辑 #1 中得到启发,Point.cuadrant(A) 可能有效,也试试吧。尝试不同的方法来执行方法,以充分理解它们的工作原理。
问题 1. 重新定义 str 函数它不打印任何东西
您在代码中使用 str
:
str(A)
str(B)
str
returns 你期望的字符串,但你什么也没做。
所以什么都不打印。你应该这样做:
print(str(A))
print(str(B))
问题 2。"cuadrant" 不成立
方法可以被class的命名空间引用。
所以如果你想引用 cuadrant
方法,你应该编码 Point.cuadrant
.
print(Point.cuadrant(A))
可能有用。
或者,更正常地说:
print(A.cuadrant())
我有这段代码,但是当我尝试使用重新定义的 str 函数时,它没有打印任何内容,更重要的是,名为 "cuadrant" 的已定义函数无法正常工作不是根据python定义的,而是:
class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y
print('The point ({},{}) has been created'.format(self.x, self.y))
def __del__(self):
print('The point ({},{}) has been deleted or overwritten'.format(self.x, self.y))
def __str__(self):
return '({},{})'.format(self.x, self.y)
def cuadrant(self):
if self.x > 0 and self.y > 0:
return '1st Cuadrant'
elif self.x < 0 and self.y > 0:
return '2nd Cuadrant'
elif self.x < 0 and self.y < 0:
return '3rd Cuadrant'
elif self.x >0 and self.y < 0:
return '4th Cuadrant'
else:
return 'Original Point'
A = Point(4, 5)
B = Point(8, 9)
str(A)
str(B)
cuadrant(A)
cuadrant(B)
我收到的错误信息是:
runfile('C:/Users/Jorge87/Desktop/Master Tema 1.5/prueba.py', wdir='C:/Users/Jorge87/Desktop/Master
Tema 1.5')
The point (4,5) has been created
The point (8,9) has been created
Traceback (most recent call last):
File "<ipython-input-9-16e5df591861>", line 1, in <module>
runfile('C:/Users/Jorge87/Desktop/Master Tema 1.5/prueba.py', wdir='C:/Users/Jorge87/Desktop/Master
Tema 1.5')
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line
827, in runfile
execfile(filename, namespace)
File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line
110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Jorge87/Desktop/Master Tema 1.5/prueba.py", line 38, in <module>
cuadrant(A)
NameError: name 'cuadrant' is not defined
看来您误解了方法的概念。在 python 中,使用点从对象调用方法,即 A.cuadrant() -- Good,cuadrant(A) -- Bad.
编辑 #1:我应该提到,在某些语言中,例如 c++,可以使用 class 的命名空间调用方法并将指向对象的指针作为第一个参数
编辑 #2:从评论和编辑 #1 中得到启发,Point.cuadrant(A) 可能有效,也试试吧。尝试不同的方法来执行方法,以充分理解它们的工作原理。
问题 1. 重新定义 str 函数它不打印任何东西
您在代码中使用 str
:
str(A)
str(B)
str
returns 你期望的字符串,但你什么也没做。
所以什么都不打印。你应该这样做:
print(str(A))
print(str(B))
问题 2。"cuadrant" 不成立
方法可以被class的命名空间引用。
所以如果你想引用 cuadrant
方法,你应该编码 Point.cuadrant
.
print(Point.cuadrant(A))
可能有用。
或者,更正常地说:
print(A.cuadrant())