我有一节课
class Animal:
def __init__(self, name='', num_of_owners=0, sleep=0):
self.name = name
self.num_of_owners = int(float(num_of_owners))
self.sleep = float(sleep)
假设我正在读取某个文件中的所有属性。
我正在为getter和setter使用Properties。
@property
def name(self):
return self.name
@name.setter
def name(self, value):
self.name = value
现在,当从文件中读取时,我不想在字典中查找我专门找到的每个属性。
所以我可以在字典上运行for并键入
for name, value in animal_props.iteritems():
setattr(animal, name, value)
但随后所有属性都被设置为字符串。
问题是我有大约8个属性,一些浮点,一些int,一些字符串。
无论如何,要为运行它,而不是为每个属性创建常规setter并运行特定的setter。
例子:
class Animal:
def __init__(self, name='', num_of_owners=0, sleep=0):
self._name = name
self._num_of_owners = int(float(num_of_owners))
self._sleep = float(sleep)
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
@property
def num_of_owners(self):
return self._num_of_owners
@num_of_owners.setter
def num_of_owners(self, value):
self._num_of_owners = int(value)
@property
def sleep (self):
return self._sleep
@sleep.setter
def sleep(self, value):
self._sleep = int(float(value))
d = {'name': 'doggy', 'num_of_owners': '3', 'sleep': '5.643'}
dog = Animal()
for name, value in d.iteritems():
setattr(dog, name, value)
print type(dog.sleep)
我需要末尾的类型为float。因为我稍后会将其用作浮点。
创建单独的“ifs”并发送给每个setter是很好的,但无论如何,只需要一个就可以了。