88951


一番年齢が若い人の名前を出力したいです。（同じ年齢の場合、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]


CC BY-SA 4.0
2022-05-20T13:38:38.187
88945
2022-05-21T13:49:32.610
2022-05-21T09:38:50.057
3060
52631
question
python
初期化メソッドでインスタンスの区別をする方法


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

「???の部分に 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]


CC BY-SA 4.0
2022-05-20T16:32:33.393
88951
2022-05-20T17:57:13.293
2022-05-20T17:57:13.293
26370
26370
88945
answer


二人だけの比較であればメソッドや関数を作成しなくてもよいでしょう。

[code]

    class Person:
        def __init__(self,name,age):
            self.name=name 
            self.age=age
    
    if __name__ == '__main__':
        a=Person("太郎",34)
        b=Person("七子",32)
    
        print([a, b][a.age > b.age].name)
    
[/code]

> 一番年齢が若い人

人数が不定の場合は以下の様にしてもよいかと思います。  
※ dataclass を使用しているため、実行には Python 3.7 以降が必要

[code]

    from dataclasses import dataclass
    from typing import Optional
    
    @dataclass
    class Person:
        name: str
        age: int
    
    def youngest_person_name(*persons: Person) -> Optional[str]:
        if not persons: return None
        if len(persons) == 1: return persons[0].name
        return sorted(persons, key=lambda x: x.age)[0].name
    
    if __name__ == '__main__':
        a = Person('小田太郎', 34)
        b = Person('山田奈子', 32)
        c = Person(name='Joel Spolsky', age=57)
    
        name = youngest_person_name(a, b, c)
        print(name)
    
[/code]


CC BY-SA 4.0
2022-05-21T01:58:14.707
88956
2022-05-21T02:33:24.683
2022-05-21T02:33:24.683
47127
47127
88945
answer