加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python format()传递一个对象

发布时间:2020-12-20 13:00:25 所属栏目:Python 来源:网络整理
导读:如果我在 Python中定义以下自定义类: class Test: hey = 'ho' yo = 'go' fo = 'sho' 有没有办法使用字符串format()方法只需要传入我的对象一次,然后在所有参数中访问它.理想情况下,我希望能够做到这样的事情: test_class = Test()print "Hey {0.hey},let's
如果我在 Python中定义以下自定义类:

class Test:
    hey = 'ho'
    yo = 'go'
    fo = 'sho'

有没有办法使用字符串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)

解决方法

正如您自己发现的那样,您可以使用关键字参数,但您甚至不必这样做:

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 go. Fo' sho

0指的是格式的第0个参数,问题是你没有第一个和第二个参数,因为你不需要它.

旁边警告:

此外,由于你似乎从其他语言来到python,你可能会犯一个常见的错误.请注意您定义类的方式;

class Test:
    hey = 'ho'
    yo = 'go'
    fo = 'sho'

仅使用类级变量,它将像静态成员一样从其他语言中借用术语.换句话说,hey,yo和fo不是实例属性,尽管您的实例可以访问类级命名空间.查看this answer.当然,这对于这个问题的目的无关紧要,但如果您不理解类定义的语义,它可能会导致错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读