Python 3.7 Class 属性 Returns 对象
Python 3.7 Class Property Returns Object
我正在尝试创建具有属性的 class。每次访问 属性,无论我如何尝试,我都会得到 <property object at xxx>
。我是 Visual Studio 社区 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: 没有任何变化。
为什么不像 described in the docs 那样做呢?刚刚@property
修饰的方法已经是getter,所以你不需要再创建另一个getter方法。对于 setter,方法名称需要与 属性 名称相同:
class Form:
def __init__(self):
self._text = "New Form test"
@property
def Text(self):
return self._text
@Text.setter
def Text(self, value):
self._text = value
f = Form()
f.Text
# output: 'New Form test'
f.Text = 'other text'
f.Text
# output: 'other text'
顺便说一句,Python3 中的 类 不需要继承自 object
。
其他版本:
# works, only a getter
def get_text(self):
return self._text
Text = property(get_text)
# works, only a getter
@property
def Text(self):
return self._text
# works, only a getter which returns 'foo.bar'
@property
def Text(self):
return "foo.bar"
对于最后一个版本,当您使用 Text = property(...)
长格式时,getter & setter 必须一起声明:
def get_text(self):
return self._text
def set_text(self, value):
self._text = value
Text = property(get_text, set_text)
我正在尝试创建具有属性的 class。每次访问 属性,无论我如何尝试,我都会得到 <property object at xxx>
。我是 Visual Studio 社区 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: 没有任何变化。
为什么不像 described in the docs 那样做呢?刚刚@property
修饰的方法已经是getter,所以你不需要再创建另一个getter方法。对于 setter,方法名称需要与 属性 名称相同:
class Form:
def __init__(self):
self._text = "New Form test"
@property
def Text(self):
return self._text
@Text.setter
def Text(self, value):
self._text = value
f = Form()
f.Text
# output: 'New Form test'
f.Text = 'other text'
f.Text
# output: 'other text'
顺便说一句,Python3 中的 类 不需要继承自 object
。
其他版本:
# works, only a getter
def get_text(self):
return self._text
Text = property(get_text)
# works, only a getter
@property
def Text(self):
return self._text
# works, only a getter which returns 'foo.bar'
@property
def Text(self):
return "foo.bar"
对于最后一个版本,当您使用 Text = property(...)
长格式时,getter & setter 必须一起声明:
def get_text(self):
return self._text
def set_text(self, value):
self._text = value
Text = property(get_text, set_text)