Python 当我使用类中定义的函数时,它们不会被识别为已定义的函数

Python 当我使用类中定义的函数时,它们不会被识别为已定义的函数,python,function,class,object,undefined-reference,Python,Function,Class,Object,Undefined Reference,我有这段代码,但当我尝试使用重新定义的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))

我有这段代码,但当我尝试使用重新定义的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)
类点:
定义初始化(self,x=0,y=0):
self.x=x
self.y=y
print('点({},{})已创建'。格式(self.x,self.y))
定义(自我):
打印({},{})点已被删除或覆盖。格式(self.x,self.y))
定义(自我):
返回“({},{})”格式(self.x,self.y)
def cuadrant(自身):
如果self.x>0且self.y>0:
返回'1st Cuadrant'
如果self.x<0且self.y>0:
返回“第二个Cuadrant”
如果self.x<0和self.y<0:
返回'3rd Cuadrant'
如果self.x>0且self.y<0:
返回'4th Cuadrant'
其他:
返回“原点”
A=点(4,5)
B=点(8,9)
str(A)
str(B)
卡德兰特(A)
卡德兰特(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
runfile('C:/Users/Jorge87/Desktop/Master Tema 1.5/prueba.py',wdir='C:/Users/Jorge87/Desktop/Master
特马1.5')
已创建点(4,5)
已创建点(8,9)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
runfile('C:/Users/Jorge87/Desktop/Master Tema 1.5/prueba.py',wdir='C:/Users/Jorge87/Desktop/Master
特马1.5')
文件“C:\ProgramData\Anaconda3\lib\site packages\spyder\u kernels\customize\spydercustomize.py”,第行
827,在运行文件中
execfile(文件名、命名空间)
文件“C:\ProgramData\Anaconda3\lib\site packages\spyder\u kernels\customize\spydercustomize.py”,第行
110,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/Jorge87/Desktop/Master Tema 1.5/prueba.py”,第38行,在
卡德兰特(A)
NameError:未定义名称“cuadrant”

您似乎误解了方法的概念。在python中,使用点从对象调用方法,即a.cuadrant()--好,cuadrant(a)--坏

< >编辑1:我应该提到,在某些语言中,例如C++,可以调用类的命名空间,并将指针传递给对象作为第一个参数

。 编辑#2:灵感来自评论和编辑#1,要点。cuadrant(A)可能有用,也可以试试。尝试不同的执行方法,以充分了解它们的工作原理。

问题1。重新定义str函数它不打印任何内容 在代码中使用
str

str(A)
str(B)
str
返回您期望的字符串,但您没有使用它。
所以什么也没印出来。你应该做:

print(str(A))
印刷品(str(B))

问题2。“cuadrant”不起作用 方法可以由类的命名空间引用。
因此,如果您想引用
cuadrant
方法,您应该编写
Point.cuadrant

print(点cuadrant(A))
可能有用。
或者,更通常地说:

print(A.cuadrant())

print(str(A))
将打印try
Point.cuadrant(A)
谢谢,更正后我再也不会收到错误消息。但是,对于重新定义的str()函数do print(str(A)),它仍然不会打印相同的结果,并且不要忘记接受帮助您的答案;)