如何为同一个 属性 设置多个名称
how to set multiple names for same property
在尝试为单个 属性.
设置多个名称时,我在 python2.7 中的行为有一个小问题
# test class
class Something():
def __init__( self ):
self._data_pack = 1.0
@property
def data_pack( self ):
return self._data_pack
@data_pack.setter
def data_pack( self, value ):
self._data_pack = value
dataPack = data_pack
x = Something()
print( 'data_pack', x.data_pack ) #>>> 1.0
print( 'dataPack', x.dataPack ) #>>> 1.0
在 Python 3+
两个 return 正确值 20
x = Something()
#change value
x.data_pack = 20
# # both read correct value
print( 'data_pack', x.data_pack ) #>>> 20
print( 'dataPack', x.dataPack ) #>>> 20
在 Python 2
只有data_pack return的新值,
数据包损坏
x = Something()
#change value
x.data_pack = 20
# # only data_pack has correct value, dataPack is broken
print( 'data_pack', x.data_pack ) #>>> 20
print( 'dataPack', x.dataPack ) #>>> 1.0
有人可以提供一些方法来确保旧 python 的行为方式相同吗?
对源 class 进行最小更改,并且没有 'magic'(第 3 方)模块。
编辑:
添加 class 推导有帮助
感谢您的回复
class Something(object):
def __init__( self ):
self._data_pack = 1.0
@property
def data_pack( self ):
return self._data_pack
@data_pack.setter
def data_pack( self, value ):
self._data_pack = value
dataPack = data_pack
添加class推导有助于解决问题
谢谢(@AKX 和@Aron_Atilla_Hegedus)
class 东西: >>>> class 东西(对象):
class Something(object):
def __init__( self ):
self._data_pack = 1.0
@property
def data_pack( self ):
return self._data_pack
@data_pack.setter
def data_pack( self, value ):
self._data_pack = value
dataPack = data_pack
在尝试为单个 属性.
设置多个名称时,我在 python2.7 中的行为有一个小问题# test class
class Something():
def __init__( self ):
self._data_pack = 1.0
@property
def data_pack( self ):
return self._data_pack
@data_pack.setter
def data_pack( self, value ):
self._data_pack = value
dataPack = data_pack
x = Something()
print( 'data_pack', x.data_pack ) #>>> 1.0
print( 'dataPack', x.dataPack ) #>>> 1.0
在 Python 3+
两个 return 正确值 20
x = Something()
#change value
x.data_pack = 20
# # both read correct value
print( 'data_pack', x.data_pack ) #>>> 20
print( 'dataPack', x.dataPack ) #>>> 20
在 Python 2
只有data_pack return的新值, 数据包损坏
x = Something()
#change value
x.data_pack = 20
# # only data_pack has correct value, dataPack is broken
print( 'data_pack', x.data_pack ) #>>> 20
print( 'dataPack', x.dataPack ) #>>> 1.0
有人可以提供一些方法来确保旧 python 的行为方式相同吗? 对源 class 进行最小更改,并且没有 'magic'(第 3 方)模块。
编辑: 添加 class 推导有帮助 感谢您的回复
class Something(object):
def __init__( self ):
self._data_pack = 1.0
@property
def data_pack( self ):
return self._data_pack
@data_pack.setter
def data_pack( self, value ):
self._data_pack = value
dataPack = data_pack
添加class推导有助于解决问题 谢谢(@AKX 和@Aron_Atilla_Hegedus)
class 东西: >>>> class 东西(对象):
class Something(object):
def __init__( self ):
self._data_pack = 1.0
@property
def data_pack( self ):
return self._data_pack
@data_pack.setter
def data_pack( self, value ):
self._data_pack = value
dataPack = data_pack