Python 2.7将类属性添加到字符串中时,是否有与本地化格式等效的方法?

时间:2018-12-06 09:05:14

标签: string python-2.7 class

我有一个具有许多属性的类,在该类中,我有一个将这些属性组合成字符串的函数。

该字符串很长,因此出于视觉目的,我想确切地看到哪个变量插入到哪里。理想的解决方案是使用"This is my %(self.var_name)s" %locals(),但是该解决方案仅在首先重新定义变量的情况下才有效。例如,请参见示例脚本:

class Shopping(object):
    def __init__(self):
        self.n_apples = 4
        self.n_pears = 5
        self.n_grapefruit =7

    def generate_list_from_self(self):

        self.shoppingList = """ 
        My Shopping List
        apples = %(self.n_apples)s
        pears = %(self.n_pears)s
        grapefruits = %(self.n_grapefruit)s
        """ %locals()

    def generate_list_redefine_variables(self):

        n_apples = self.n_apples
        n_pears = self.n_pears
        n_grapefruit = self.n_grapefruit

        self.shoppingList = """ 
        My Shopping List
        apples = %(n_apples)s
        pears = %(n_pears)s
        grapefruits = %(n_grapefruit)s
        """ %locals()


shopping = Shopping()

# First method
shopping.generate_list_from_self()

# Second method
shopping.generate_list_redefine_variables()

理想的解决方案是使用generate_from_self()方法,但变量%locals()不会拾取。相反,我使用第二种方法并在将变量插入字符串之前在本地重新定义变量。这似乎很麻烦,我想知道是否有更好的方法来实现这一目标?

至关重要的是,当我使用的字符串变得非常大时,我能够看到变量在字符串中的插入位置。

1 个答案:

答案 0 :(得分:0)

首先,简单的方法是将第一种方法更改为:

 def generate_list_from_self(self):
     self.shoppingList = """ 
     My Shopping List
     apples = %(n_apples)s
     pears = %(n_pears)s
     grapefruits = %(n_grapefruit)s
     """ %vars(self)

在这里我使用了vars method

通常,这种方法通常使用__str__(self)(将您的类转换为字符串),但是由于存在self.shoppingList的初始化,因此我不确定这是否适合您。但无论如何,我都会参考您的实现:

class Shopping(object):
     def __init__(self):
         self.n_apples = 4
         self.n_pears = 5
         self.n_grapefruit =7

     def __str__(self):
         self.shoppingList =""" 
         My Shopping List
         apples = %(n_apples)s
         pears = %(n_pears)s
         grapefruits = %(n_grapefruit)s
         """ %vars(self)
         return self.shoppingList


shopping = Shopping()
str(shopping) # calls your class's __str__(self) method

最后,要使该类包含所有需要的购物,您可以使用dict并返回(key, value)对,这样就不必为每个产品定义变量。