Python:如何使用某种泛型setter?

2024-04-26 00:46:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我制定了以下准则:

if fc.get('field_photo_1'):
    pt.photo1 = fc.get('field_photo_1')
if fc.get('field_photo_2'):
    pt.photo2 = fc.get('field_photo_2')
if fc.get('field_photo_3'):
    pt.photo3 = fc.get('field_photo_3')

我想把它优化成这样的代码:

update_field(photo1, 'field_photo_1'):
update_field(photo2, 'field_photo_2'):
update_field(photo3, 'field_photo_3'):

我只是不知道如何在python中用索引来创建一个setter。如何实现update_field()函数?你知道吗


Tags: 函数代码ptfieldgetifupdatesetter
3条回答

您正在寻找setattr,它接受字符串属性名称。你知道吗

试试这个:

for x in range(1, 4):
    attrname = "photo_".format(x)
    setattr(pt, attrname, fc["field_".format(attrname)])

您可能应该重构代码以使用列表。你知道吗

您可以看看setattr()函数。你知道吗

我建议创建一个照片数组,然后使用for循环迭代字符串,而不是尝试创建这样的setter。它更容易理解,并且不会对您的类做其他程序员可能不期望的不寻常的事情。你知道吗

class Pt:
    def __init__(self):
        self.photos = [None for i in range(3)]

pt = Pt()
for i in range(1,4)
    fieldString = 'field_photo_{0}'.format(i)
    if fc.get(fieldString):
        pt.photos[i] = fc.get(fieldString)

相关问题 更多 >