Pythonのクラスでは属性に直接読み書きができる。
class MyClass(object):
def __init__(self):
self.myattr = 1
my = MyClass()
print(my.myattr) # 1
@propertyデコレータで、読み取り専用のプロパティが作成できる。
class MyClass(object):
def __init__(self):
self.myattr = 1
@property
def en_myattr(self):
return ['zero', 'one',
'two', 'three'][self.myattr]
my = MyClass()
my.en_myattr # 'one'
my.myattr=5
my.en_myattr #'five'
@property名.setterで書き込み可能なプロパティが作成できる。
class MyClass(object):
def __init__(self):
self.myattr = 1
@property
def en_myattr(self):
return ['zero', 'one',
'two', 'three'][self.myattr]
@en_myattr.setter
def en_myattr(self, val):
self.myattr = ['zero', 'one',
'two', 'three'].index(val)
my = MyClass()
print(my.en_myattr) # one
my.en_myattr = 'two'
print(my.en_myattr) # two
print(my.myattr) # 2