如果我用Python定义以下自定义类:
class Test:
hey = 'ho'
yo = 'go'
fo = 'sho'
在使用string format()
方法只需传入我的对象一次,然后在所有参数中访问该对象时,是否有任何方式。理想情况下,我希望能够做这样的事情:
test_class = Test()
print "Hey {0.hey}, let's {1.yo}. Fo' {2.sho}".format(test_class)
但我必须这么做:
test_class = Test()
print "Hey {0.hey}, let's {1.yo}. Fo' {2.sho}".format(test_class, test_class, test_class)
发布于 2017-08-04 09:47:59
当我发布这篇文章时,我意识到我可以仅仅是关键字的论点。
test_class = Test()
print "Hey {my_class.hey}, let's {my_class.yo}. Fo' {my_class.sho}".format(my_class=test_class)
此外,根据我最初的问题,只需重用0
位置参数就可以做到这一点,如下所示:
test_class = Test()
print "Hey {0.hey}, let's {0.yo}. Fo' {0.sho}".format(test_class)
此外,正如Ryan在评论中指出的那样,Python 3.6+附带了新的f-字符串,这意味着我也可以这样做:
test_class = Test()
print(f"Hey {test_class.hey}, let's {test_class.yo}. Fo' {test_class.sho}")
发布于 2017-08-04 09:49:47
正如您自己发现的,您可以使用关键字参数,但您甚至不必这样做:
In [4]: print("Hey {0.hey}, let's {0.yo}. Fo' {0.fo}".format(t))
Hey ho, let's go. Fo' sho
In [5]: class Test:
...: hey = 'ho'
...: yo = 'go'
...: fo = 'sho'
...:
In [6]: t = Test()
In [7]: print("Hey {0.hey}, let's {0.yo}. Fo' {0.fo}".format(t))
Hey ho, let's go. Fo' sho
0
将零参数引用到format
,问题是您没有第一个和第二个参数,因为您不需要它。
作为旁白的警告:
而且,由于您似乎是从其他语言来使用python的,所以您可能犯了一个常见的错误。请注意,您定义类的方式;
class Test:
hey = 'ho'
yo = 'go'
fo = 'sho'
只使用类级变量,这些变量将像静态成员一样从其他语言借用术语.换句话说,hey
、yo
和fo
不是实例属性,尽管您的实例可以访问类级命名空间。看看这个答案。当然,对于这个问题来说,这并不重要,但是如果您不理解类定义的语义,它可能会导致错误。
发布于 2017-08-04 09:49:57
{0.hi}是指传递给format的第一个参数的“嘿嘿”属性。
因此,您只需引用正确的论点:
test_class = Test()
print "Hey {0.hey}, let's {0.yo}. Fo' {0.fo}".format(test_class)
https://stackoverflow.com/questions/45512735
复制