Python3.7类属性返回对象

Python3.7类属性返回对象,python,class,object,properties,Python,Class,Object,Properties,我正在尝试创建一个具有属性的类。每次访问该属性时,无论我如何尝试,都会得到。我正在Visual Studio Community 2019中运行3.7.8版。以下是我尝试过的所有不同方法: class Form(object): def __init__(self): self._text="New Form test" #----------------------------------------------------------

我正在尝试创建一个具有属性的类。每次访问该属性时,无论我如何尝试,都会得到
。我正在Visual Studio Community 2019中运行3.7.8版。以下是我尝试过的所有不同方法:

class Form(object):
    def __init__(self):
        self._text="New Form test"

    #----------------------------------------------------------
    #example 1
    @property
    def Text(self):
        return _text
    
    @Text.getter
    def get_text(self):
        return self._text

    @Text.setter
    def set_text(self,value):
        self._text=value
    #----------------------------------------------------------
    #example 2
    def get_text(self):
        return self._text

    Text = property(get_text)
    #----------------------------------------------------------
    #example 3
    @property
    def Text(self):
        return self._text
    #----------------------------------------------------------
    #example 4
    @property
    def Text(self):
        return "foo.bar"
    #----------------------------------------------------------
    #example 5
    def get_text(self):
        return self._text

    def set_text(self,value):
        self._text=value

    Text=property()
    Text.getter(get_text)
    Text.setter(set_text)
    #----------------------------------------------------------
    #example 6
    def get_text(self):
        return self._text

    def set_text(self,value):
        self._text=value
    
    Text = property(get_text,set_text)
    #----------------------------------------------------------
我为每个示例添加了标签,并添加了#6,以及我根据给出的一个答案尝试的另一种方法。我还将Form(object):更改为Form:不做任何更改。

为什么不按原样做呢。仅由
@property
修饰的方法已经是getter,因此不需要创建另一个getter方法。对于setter,方法名需要与属性名相同:

课程形式:
定义初始化(自):
self.\u text=“新形式测试”
@财产
def文本(自我):
返回self.\u文本
@文本设置器
def文本(自身、值):
self.\u text=值
f=形式()
f、 正文
#输出:“新表单测试”
f、 Text='其他文本'
f、 正文
#输出:“其他文本”
顺便说一句,Python3中的类不需要从
对象继承

其他版本:

#有效,只有一个getter
def get_文本(自身):
返回self.\u文本
Text=属性(获取文本)
#有效,只有一个getter
@财产
def文本(自我):
返回self.\u文本
#有效,只有返回'foo.bar'的getter
@财产
def文本(自我):
返回“foo.bar”
对于上一个版本,当您使用
Text=property(…)
长格式时,getter和setter必须一起声明:

def get_text(self):
返回self.\u文本
def set_文本(自身、值):
self.\u text=值
Text=属性(获取文本、设置文本)

您能否更具体地评论一下“为什么不按照文档中描述的方式进行?”?根据文档,有三种不同的方法来编写代码,在我的示例中,您将看到我尝试了这些不同的方法以及更多。我甚至试着将你的代码复制粘贴到我的类中,它仍然会返回对象,而不是文本。我还尝试过在不做任何更改的情况下删除对象的继承。在您的一些尝试中有一个小的变化-如果没有变化,您的代码就会工作。事实上,只有第一个和最后一个变体需要修复。其他3人都很好。这是标准Python,没有模块,没有导入。因此,如果它不在VSCommunity上工作,请检查它是否在从命令行执行的常规Python脚本中工作。在你当前的问题版本中,
example 6
是我上面提到的问题,这是有效的。同样,如果你的安装对你不起作用,它可能会被严重破坏。代码在VS之外运行,没有任何更改。欢迎使用StackOverflow。阅读“”,了解和。我让我的Rasp Pi运行,并在那里运行代码。它仍然显示属性对象,而不是文本值。所以它不可能是在我的电脑上安装的python。Wrt“无论我如何尝试”-显示您用于创建类实例并访问和设置这些属性的代码;就像我做的那样。例如
f=Form()…
您还执行什么?导入表单全局\u Form\u Form=Form.Form lbl=Entry(designFormTitlebar)lbl.configure(fg=“white”,font=“Arial 10 bold”,background=“blue2”)lbl.insert(0,\u Form.Text)lbl.place(x=5,y=5)