當Python評估聲明my_story = Situation(...)
,它必須評估參數第一,否則沒有什麼要傳遞給Situation()
類。 此時沒有實例,因爲該類還沒有被調用。 my_story
名稱的分配僅在創建實例後纔會發生,因此您也不能使用該名稱。
所以不,你不能引用實例,因爲它還不存在。
可以播放存儲在一個單獨的變量第一:
player = 'Maggie'
my_story = Situation(player, "once upon a time there was a kid named %s" % (player,))
或者,你可以通過對責任填充模板到__init__
方法;你可以給它一個字符串以%s
佔位符,例如:
class Situation:
def __init__(self, player, story):
self.player = player
self.story = story % (self.player,)
my_story = Situation("Maggie", "once upon a time there was a kid named %s")
有這樣做的更好的方法,使用命名爲佔位符:
class Situation:
def __init__(self, player, story):
self.player = player
self.story = story % {'player': self.player}
my_story = Situation("Maggie", "once upon a time there was a kid named %(player)s")
我個人使用較新的str.format()
method這裏,因爲格式更清晰:
class Situation:
def __init__(self, player, story):
self.player = player
self.story = story.format(player=self.player)
my_story = Situation("Maggie", "once upon a time there was a kid named {player}")
這沒有多大意義,如果你定義這樣的事情,他們可以成爲遞歸。 Haskell可以做這樣的事情,但它可能不是你想要的。 – simonzack
現在str.format()會爲你做這項工作,就像Claudiu寫的那樣。當這個變得更大時,你應該尋找一個模板引擎。 – jhinghaus