1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クラスの継承

Last updated at Posted at 2024-03-05

さて、これもなかなかあまりないので
手探りでやってみましたがだめでした。

class Ghest():
    def __init__(self,number,food_name,age,order):
        self.number = int(number)
        self.food_name = food_name
        self.age = int(age)
        self.order = int(order)
        
    def __str__(self):
        """表示文字列に変換する"""
        return f"{self.number} {self.food_name} {self.age} {self.order}"
        
    
    def getnum(self):
        return self.number
    
    def getname(self):
        return self.food_name
        
    def getage(self):
        return self.age
        
    def getorder(self):
        return self.order
        
    def sumup_order(self,food_name,new_order):
        if self.food_name != "alcohol":
            ghests[int(number)-1].order += int(new_order)

class Ghest_over_20(Ghest):
    def __init__(self,number,food_name,age,order):
        super().__init__(number,food_name,age,order)

    def sumup_order(self,food_name,new_order):
        self.order += int(new_order)

    
ghests =[]
N,K = map(int,input().split())

#お客様リスト
for i in range(N):
    number,age = i, int(input())
    food_name,order = "",0
    if age > 20:
        ghests.append(Ghest_over_20(number,food_name,age,order))
    else:
        ghests.append(Ghest(number,food_name,age,order))



#注文リスト
for j in range(K):
    number,food_name,new_order = input().split()
    ghests[int(number) - 1].sumup_order(food_name,int(new_order))

#結果
for ghest in ghests:
    print(ghest.order)

時間もないので解答みました。
アルコールOKならfoodが200円引きなの忘れてました。
なのでちょっと書き直します。
initするときsumもリセットしないとだめですね。
他にもメソッドで、foodかsoftdrinkかalcoholかを分けて定義してましたね。
何もしないはpassで定義します。
adultクラスは、
アルコールの有無でTrue/Falseを格納させて、
foodの場合に200円引きさせてましたね。

で、その後、20歳かそうでないかでクラスを大人クラスか子どもクラスを選んで
配列に直接入れてましたね。。。なるほどです。

書き直しました。

class Ghest():
    def __init__(self):
        #初期化
        self.sum = 0

    def take_food(self, price):
        self.sum += int(price)
    def take_softdrink(self, price):
        self.sum += int(price)

    def take_alcohol(self, price):
        pass
    def get_sum(self):
        return self.sum

class Adult(Ghest):
    def __init__(self):
        super().__init__()
        #初期化
        self.alcohol = False
    def take_food(self, price):
        if self.alcohol:
            self.sum += int(price) - 200
        else:
            self.sum += int(price)
    def take_alcohol(self,price):
        self.sum += int(price)
        self.alcohol = True

N, K = map(int,input().split())
ghests = [None] * N

for i in range(N):
    age = int(input())
    if age >= 20:
        ghests[i] = Adult()
    else:
        ghests[i] = Ghest()

#注文リスト
for _ in range(K):
    number,order,price = input().split()
    if order == "food":
        ghests[int(number)-1].take_food(price)
    elif order == "softdrink":
        ghests[int(number)-1].take_softdrink(price)
    else:
        ghests[int(number)-1].take_alcohol(price)

#結果
for ghest in ghests:
    print(ghest.get_sum())

initで、毎回self.numberとか定義を毎回やらないかんのかなとずっと
思い込んでいたのですが、どうやらそうでもないみたいです。
どんな時にinitで定義しないとだめなのかな。そこがまだわからないですね。。。

なかなかクラスのことを理解できず、まだまだ時間がかかりますね。。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?