[英]defining method of class in if statement
我正在嘗試創建一個類,該類將根據輸入創建具有不同方法的對象。 這樣做的目的是避免每次調用方法時都使用 if 語句。
下面是我認為可以工作但不工作的代碼。
class Food:
def __init__(self,food_type):
self.food_type = food_type
if food_type == 'cookie':
print 'this is a cookie'
def is_awesome(self):
print "is awesome"
else:
print 'this is not a cookie'
def is_awesome(self):
print "not awesome"
Oreo = Food('cookie')
Oreo.is_awesome()
代碼在def is_awesome(self)
語句上沒有錯誤,而是Oreo.is_awesome()
行引發了錯誤:
“AttributeError: Food 實例沒有屬性 is_awesome”。
有沒有更好的方法來制作具有不同方法的對象? ,是有原因的方法is_awesome
是不是“Oreo.is_awesome”贖回?
你必須定義方法/函數is_awesome(self)
然后你的if's
里面
class Food:
def __init__(self,food_type):
self.food_type = food_type
def is_awesome(self):
if self.food_type == 'cookie':
print 'this is a cookie'
print "is awesome"
else:
print 'this is not a cookie not awesome'
print "not awesome"
Oreo = Food('cookie')
Oreo.is_awesome()
這有效,經過測試!
有沒有更好的方法來制作具有不同方法的對象?
是的,一種有效的方式:) 多態性是一個很好的候選者。
class Food:
def is_awesome(self):
print 'not awesome'
class Cookie(Food):
def is_awesome(self):
print 'is awesome'
是否有理由無法通過“Oreo.is_awesome”調用 is_awesome 方法?
是的,它不綁定到任何實例(通常稱為self
)
我遇到了類似的情況,我希望一個類的不同實例讓其中一個方法根據 init 值表現出不同的行為,但仍然具有相同的方法名稱,並且不想在每次調用時運行 if/else 語句方法。
我找到的最簡單的解決方案是定義一個 setter 方法,該方法創建一個指向所需行為的指針,並且這個 setter 方法僅在初始化時運行一次:
class Food:
def __init__(self, food_type):
self.food_type = food_type
self.set_awesomeness()
def is_awesome():
return 'is awesome'
def not_awesome():
return 'not awesome'
# Point to the wanted behavior
def set_awesomeness(self):
if self.food_type == 'cookie':
self.awesomeness = Food.is_awesome()
else:
self.awesomeness = Food.not_awesome()
def get_awesomeness(self):
return self.awesomeness
cookie = Food('cookie')
cookie.get_awesomeness() # 'is awesome'
donut = Food('donut')
donut.get_awesomeness() # 'not awesome'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.