我有一个具有许多属性的类,在该类中,我有一个将这些属性组合成字符串的函数。
该字符串很长,因此出于视觉目的,我想确切地看到哪个变量插入到哪里。理想的解决方案是使用"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()
不会拾取。相反,我使用第二种方法并在将变量插入字符串之前在本地重新定义变量。这似乎很麻烦,我想知道是否有更好的方法来实现这一目标?
至关重要的是,当我使用的字符串变得非常大时,我能够看到变量在字符串中的插入位置。
答案 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)
对,这样就不必为每个产品定义变量。