tatsu99さんから正しい回答がついていますから、そちらをBAにしていただければいいですが、悩んだあとが見えるので、ちょっと解説を。
python
1class Person:
2 def __init__(self,name,age):
3 self.name=name
4 self.age=age
5 def print_younger_person_name(p1,p2):
6 if p1>p2:
7 print('小林花子')
8 elif p1==p2:
9 print('高橋太郎')
10
11a=Person("高橋太郎",19)
12b=Person("小林花子",18)
13a.print_younger_person_name()
でているエラーですが、「メソッド(関数)に必要な引数が1つ(p2)足りません」とあります。
定義では「def print_younger_person_name(p1,p2)」このように引数を 2つ必要としていますが、実際の呼び出しは「a.print_younger_person_name()」このように 引数がありません。ただpythonでメソッドを呼ぶ場合は、暗黙で第一引数にインスタンスそのもの(この場合はa)が渡されるので、1つ足りないということになるのです。
ちなみに、メソッド定義で 第一引数に使われるselfは、言語仕様的には実は名前は何でもよくて、決まりとしてselfを使いましょうということになっています。なので、p1でもエラーにはなりません。
なので、単に回答をするのであれば、
python
1a.print_younger_person_name(b)
とするということになります。 これで、p2にbが対応するようになります。
次に、比較の「p1>p2」ですが、このようにクラスのインスタンスを直接比較できるようにするには、特殊メソッド(__gt__
や__lt__
など)の定義ぎ必要です。 簡単にやるのであれば、クラスの属性を使ったtatsu99さんの回答のようにすればいいでしょう。
さらに、メソッド定義ですが、先にも書いたように第一引数はselfとするのが通例です。
ということで、別解としてはこんな感じでしょうか。
aのメソッドを使っているので、aをさらに渡す必要はないかなと思います。
python
1class Person:
2 def __init__(self,name,age):
3 self.name=name
4 self.age=age
5 def print_younger_person_name(self,p2):
6 if self.age < p2.age:
7 print(self.name)
8 elif self.age > p2.age:
9 print(p2.name)
10 else:
11 print("same age")
12
13a=Person("高橋太郎",19)
14b=Person("小林花子",18)
15a.print_younger_person_name(b)