初期化メソッドでインスタンスの区別をする方法


一番年齢が若い人の名前を出力したいです。（同じ年齢の場合、p1を出力）

[code]

    class Person:
        def __init__(self,name,age):
            self.name=name 
            self.age=age
    
        def print_younger_person_name(p1,p2):
            return p1.name if p2.age>=p1.age else p2.name
    
        
    a=Person("太郎",34)
    b=Person("七子",32)
    
    print(print_younger_person_name(a,b))
    
[/code]




質問のタイトルと本文の説明は関連していません。  
本文に書かれた内容を行うために「初期化メソッドでインスタンスの区別をする」必要はありません。

「???の部分に if や else で分岐させます。`pa.age > pb.age` みたいな感じにしたい」時には、`def
print_young(p):`の引数を2つ用意します。

[code]

    def print_young(pa, pb):
        younger = pb if pa.age > pb.age else pa
        return younger.name
    
[/code]

あるいは：

[code]

    def print_young(pa, pb):
        return pb.name if pa.age > pb.age else pa.name
    
[/code]

呼び出す際は引数を2つ指定します。

[code]

    a=People("小田太郎",34)
    b=People("山田奈子",32)
    
    print(print_young(a, b))
    
[/code]

* * *

コメント対応：

更新した質問記事では、`print_younger_person_name()`が`Person`クラスのメソッドになっているのでエラーが発生しています。  
以下のようにインデントを解除して`Person`クラスのメソッドではなくせば、呼び方は変わりません。

[code]

    class Person:
        def __init__(self,name,age):
            self.name=name 
            self.age=age
    
    def print_younger_person_name(p1,p2):
        return p1.name if p2.age>=p1.age else p2.name
    
[/code]

これを`Person`クラスのメソッドに変更したい時は以下のようにして、呼び方も変える必要があります。

[code]

    class Person:
        def __init__(self,name,age):
            self.name=name 
            self.age=age
        
        def print_younger_person_name(self,param):
            return self.name if param.age>=self.age else param.name
    
    a=Person("太郎",34)
    b=Person("七子",32)
    
    print(a.print_younger_person_name(b))
    # あるいは
    print(b.print_younger_person_name(a))
    
[/code]




質問のタイトルと本文の説明は関連していません。  
本文に書かれた内容を行うために「初期化メソッドでインスタンスの区別をする」必要はありません。

「???の部分に if や else で分岐させます。`pa.age > pb.age` みたいな感じにしたい」時には、`def
print_young(p):`の引数を2つ用意します。

[code]

    def print_young(pa, pb):
        younger = pb if pa.age > pb.age else pa
        return younger.name
    
[/code]

あるいは：

[code]

    def print_young(pa, pb):
        return pb.name if pa.age > pb.age else pa.name
    
[/code]

呼び出す際は引数を2つ指定します。

[code]

    a=People("小田太郎",34)
    b=People("山田奈子",32)
    
    print(print_young(a, b))
    
[/code]

* * *

コメント対応：

更新した質問記事では、`print_younger_person_name()`が`Person`クラスのメソッドになっているのでエラーが発生しています。  
以下のようにインデントを解除して`Person`クラスのメソッドではなくせば、呼び方は変わりません。

[code]

    class Person:
        def __init__(self,name,age):
            self.name=name 
            self.age=age
    
    def print_younger_person_name(p1,p2):
        return p1.name if p2.age>=p1.age else p2.name
    
[/code]

これを`Person`クラスのメソッドに変更したい時は以下のようにして、呼び方も変える必要があります。

[code]

    class Person:
        def __init__(self,name,age):
            self.name=name 
            self.age=age
        
        def print_younger_person_name(self,param):
            return self.name if param.age>=self.age else param.name
    
    a=Person("太郎",34)
    b=Person("七子",32)
    
    print(a.print_younger_person_name(b))
    # あるいは
    print(b.print_younger_person_name(a))
    
[/code]

