我想把我的動物類繼承給狗類。一切都很好,直到我想在操作1處寫Dog.add_info()。我在第46行寫了Dog = Dog(animal),但我認為有一個問題,但我找不到它是什么。我首先學習了'類'的東西和'繼承'的東西。
import random
class animal()。
def __init__(self,name,leg,place,move,weight,lenght):
self.name = name
self.leg = legs
self.place = place
self.move = 移動
self.weight = weight
self.lenght = lenght
def __str__(self):
return "名稱。{}
腿:{}。
地點。{}
移動:{}。
重量:{}。
Lenght: {}".format(self,self.name,self.legances,self.place,self.move,self.weight,self.lenght)
def add_info(self)。
info_name = input("enter name")
info_legs = input("輸入這個動物有幾條腿")
info_place = input("輸入這個動物住在哪里")
info_move = input("Enter how move this animal")
info_weight = input("輸入重量")
info_lenght =input("Enter lenght")
self.name = info_name
self.leg = info_legs
self.place = info_place
self.move = info_move
self.weight = info_weight
自身的長度 = info_lenght
class Dog(animal)。
def __init__(self,name,leg,place,move,weight,lenght,feather,aggresivity):
super().__init__(self,name,leggs,place,move,weight,lenght)
self.feather = feather
self.aggresivity = aggresivity
def __str__(self):
return "名稱。{}
腿:{}。
地點。{}
移動:{}。
重量:{}。
長度:{}。
羽毛。{}
Aggresivity {}".format(self, self.name, self.lieg,self.place, self.move,self.weight, self.lenght,self.feather,self.aggresivity)
def add_info(self)。
super().add_info()
info_feather = input("Enter are your dog have feather or not 'have' or 'have not")
info_aggresivity =input("Enter are your dog aggresive or passive" )
self.feather = info_feather
self.aggresivity = info_aggresivity
def pick_random(self)。
list_dog = ["拉布拉多","斗牛犬","獵犬。 ","貴賓犬","比格犬","赫斯基"]
random_dog = random.choice(list_dog)
print("Your dog is :",隨機狗)
狗 = 狗(動物)
print(""
1用于為你的狗添加資訊
2用于獲取你的狗的資訊
3代表隨機選擇狗的型別
q代表退出
"")
choice = input("輸入操作:")
while True:
if (choice =="q") 。
print("bye...")
break(span class="hljs-string">"BYE.")
elif(choice == "1") 。
狗.add_info()
elif(choice =="2") 。
通過。
elif(choice =="3") 。
通過。
else:
print("?nvalid operation")
uj5u.com熱心網友回復:
Dog期待所有與animal相同的引數;你正在傳遞animal類本身作為一個引數。
與其重復來自Animal.__init__的所有引數,不如使用關鍵字引數來簡化Dog.__init__的定義。
首先,我們將對Animal進行一些清理。請注意,你在很多方法中不必要地傳遞了self,因為super()已經捕獲了要傳遞的值。
class Animal。
def __init__(self, *, name, legs, place, move, weight, length, **kwargs)。
super().__init__(**kwargs)
self.name = name
self.leg = legs
self.place = 地點
self.move = 移動
self.weight = 重量
self.length = length
def __str__(self):
return "名稱。{}
腿:{}。
地點。{}
移動:{}。
重量:{}。
長度:{}".format(self.name, self.leges, self.place, self.move, self.weight, self.length)
def add_info(self)。
info_name = input("enter name")
info_legs = input("輸入這個動物有幾條腿")
info_place = input("輸入這個動物住在哪里")
info_move = input("Enter how move this animal")
info_weight = input("輸入重量")
info_length = input("Enter length")
self.name = info_name
self.leg = info_legs
self.place = info_place
self.move = info_move
self.weight = info_weight
自身長度 = info_length
現在我們定義Dog時只使用extra引數;任何用于超類方法的東西都將作為任意的關鍵字引數被傳遞,Dog將被傳遞。
class Dog(Animal)。
def __init__(self, *, feather, aggresivity, **kwargs)。
super().__init__(**kwargs)
self.feather = feather
self.aggresivity = aggresivity
def __str__(self):
x = super().__str__()
return x "
羽毛。{}
Aggresivity {}".format(self.feather, self.aggresivity)
def add_info(self)。
super().add_info()
info_feather = input("Enter are your dog have feather or not 'have' or 'have not")
info_aggresivity =input("Enter are your dog aggresive or passive" )
self.feather = info_feather
self.aggresivity = info_aggresivity
def pick_random(self)。
list_dog = ["拉布拉多","斗牛犬","獵犬。 ","貴賓犬","比格犬","赫斯基"]
random_dog = random.choice(list_dog)
print("Your dog is :",random_dog)
最后,我們使用關鍵字引數將Dog實體化。
d = Dog(name="..."/span>, legs="..."/span>, ...) # 等等。
uj5u.com熱心網友回復:
當初始化一個類時,你必須提供init方法所需的所有引數。請看這個偉大(和類似主題)的答案,它說明了初始化一個實體的正確方法:
class Dog。
def __init__(self, legs, color):
self.lieg = legs
self.color = color
fido = Dog(4, "brown")
spot = Dog(3, "much yellow")
在你的案例中,你需要提供所有需要的引數。名稱、腿、地點、移動、重量、長度、羽毛、攻擊性。
如果你想寫一個幫助用戶實體化的函式,你可以創建一個classmethod:
class Animal:
...
@classmethod: ...
def add_info(cls)。
info_name = input("enter name")
info_legs = input("輸入這個動物有幾條腿")
info_place = input("輸入這個動物住在哪里")
info_move = input("Enter how move this animal")
info_weight = input("輸入重量")
info_lenght =input("Enter lenght")
return cls(
info_name,
info_legs,
info_place,
info_move,
info_weight,
資訊長度
)
現在,呼叫Animal.add_info()將提示用戶正確的屬性,然后回傳一個正確實體化的物件。
uj5u.com熱心網友回復:
這個答案是基于我上面評論中的資訊:
這個答案是基于我上面評論中的資訊。
import random
class animal()。
def __init__(self,name,leg,place,move,weight,length)。
self.name = name
self.leg = legs
self.place = place
self.move = 移動
self.weight = weight
self.length = length
def __str__(self):
return "名稱。{}
腿:{}。
地點。{}
移動:{}。
重量:{}。
length: {}".format(self,self.name,self.lieg,self.place,self.move,self.weight,self.length)
def add_info(self)。
info_name = input("enter name")
info_legs = input("輸入這個動物有幾條腿")
info_place = input("輸入這個動物住在哪里")
info_move = input("Enter how move this animal")
info_weight = input("輸入重量")
info_length =input("Enter length")
self.name = info_name
self.leg = info_legs
self.place = info_place
self.move = info_move
self.weight = info_weight
自身的長度 = info_length
class Dog(animal)。
def __init__(self, name="sparky", legs=4, place="right here", move=True,
weight="45 pounds", length="30 inches", feather=False, aggresivity="friendly")。)
super().__init__(name, legs, place ,move, weight, length)
self.feather = feather
self.aggresivity = aggresivity
def __str__(self):
return "名稱。{}
腿:{}。
地點。{}
移動:{}。
重量:{}。
長度:{}。
羽毛。{}
Aggresivity {}".format(self, self.name, self.lieg,self.place, self.move,self.weight, self.length,self.feather,self.aggresivity)
def add_info(self)。
super().add_info()
info_feather = input("Enter are your dog have feather or not 'have' or 'have not")
info_aggresivity =input("Enter are your dog aggresive or passive" )
self.feather = info_feather
self.aggresivity = info_aggresivity
def pick_random(self)。
list_dog = ["拉布拉多","斗牛犬","獵犬。 ","貴賓犬","比格犬","赫斯基"]
random_dog = random.choice(list_dog)
print("Your dog is :",random_dog)
狗 = 狗()
print(""
1用于為你的狗添加資訊
2用于獲取狗狗的資訊
3代表隨機選擇狗的型別
q代表退出
"")
while True:
choice = input("輸入操作:")
if (choice =="q") 。
print("bye...")
break(span class="hljs-string">"BYE.")
elif(choice == "1") 。
狗.add_info()
elif(choice =="2") 。
通過。
elif(choice =="3") 。
通過。
else:
print("?nvalid operation")
如果你有任何進一步的問題,請告訴我。
。轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/310503.html
標籤:
