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)