レベル1


最初のTILレコード
曖昧な概念を再捉えましょう.

Pythonクラス


クラスを把握する前に,まずオブジェクト向けプログラミングについて理解する.
オブジェクト向けプログラミング(OOP)は、コンピュータプログラミングのモデルの一つであり、オブジェクトベースのプログラミングである.これは、必要なデータを抽象化し、状態と動作を持つオブジェクトを作成し、これらのオブジェクト間の有機的なインタラクションによって論理を組織するプログラミング方法です.
オブジェクト向けのプログラムを使用して、データを効率的に管理し、同じコードの重複を排除し、メンテナンスを容易にします.

  • クラス:オブジェクトのメタデータを作成するために、グループに属する属性(attribute)と動作(behavior)を変数とメソッドとして定義します.簡単に言えば、これは設計図であり、同じものを生成し続けることができると考えられる.
  • 例えば、人の属性は氏名、年齢、性別、身長、体重、住所である.
    方法は歩くこと、走ること、横になることなどで表現できます.

  • ≪インスタンス(オブジェクト)|Instance(Objects)|oem_src≫:クラスで定義された実際のメモリに割り当てられた、実際のアプリケーションで使用されるデータ.つまり、レベルで作られた被造物.
    このとき,同一クラスのオブジェクト間は互いに影響を及ぼさず,固有の性質を持つ.
    クラスで作成されたオブジェクトもインスタンスと呼ばれます.では、オブジェクトとインスタンスの違いは何でしょうか.そう思いましょう.a=Cookie()というaが対象です.そしてaオブジェクトはCookieのインスタンスである.すなわち、インスタンスという語は、あるオブジェクト(a)があるクラス(Cookie)のオブジェクトであることを関係を主として説明するために用いられる.「aはインスタンス」よりも「aはオブジェクト」が適切であり、「aはCookieのオブジェクト」は「aはCookieのインスタンス」よりも適切である.
  • 簡単な例を挙げる.

    クラス、インスタンスの作成

    class UserInfo:
        def __init__(self, name):
            self.name = name
        def user_info_p(self):
            print("Name: ", self.name)
            
      user1 = UserInfo("Hyun")
            
    # 네임스페이스: 객체를 인스턴스화 할 때 저장된 공간.
    # 클래스 변수: 직접 사용가능, 객체보다 먼저 생성된다.
    # 동일한 클래스로 만든 객체끼리는 서로 영향을 미치지 않으며 고유한 성격을 가지고있다. 
    # 인스턴스 변수: 객체마다 별도로 존재, 인스턴스 생성 후 사용. 
  • Pythonの「コンストラクション関数」とは、オブジェクトの生成時に自動的に呼び出されるメソッドのこと.
    Pythonでは__init__メソッドが生成された.オブジェクトを作成するときは、作成者に必要な値を同時に渡す必要があります.上記の例では、nameはuser 1と同様に「hyun」という値とともに作成する必要があります.
  • 自己理解

    class SelfTest():
        def func1(): # 클래스 메서드
            print('func1 called')
        def func2(self): # 인스턴스 메서드
            print('func2 called')
    
    self_test = SelfTest()
    # self_test.func1() 오류
    SelfTest.func1() # 클래스 변수는 직접 접근해야한다. 
    self_test.func2()
    SelfTest.func2(self_test)

    クラス変数、インスタンス変数

    class WareHouse():
        # 클래스 변수(self 없음)
        stock_num = 0 # self가 없기 때문에 공동으로 공유한다. 여러 인스턴스에서
        def __init__(self, name):
            self.name = name
            WareHouse.stock_num += 1
            # 창고가 하나 생길때 마다 전체 재고를 1씩 추가해 준다.
    
    user1 = WareHouse("Kim")
    user2 = WareHouse("Park")
    user3 = WareHouse("Lee")
    
    print(WareHouse.__dict__) # stock_num : 3 인걸 확인할 수 있음
    
    print(user1.name) # Kim
    print(user1.stock_num) # 3
    # 본인의 네임스페이스에 없으면 클래스 네임 스페이스에 가서 찾고 없으면 오류
  • print(WareHouse.__dict__)stock num:3と確認できます.すなわち,クラス変数は共有される.
  • ソース
    https://velog.io/@shchoice/java-oop-2
    https://jeong-pro.tistory.com/95
    JumptoPython,https://wikidocs.net/28
    高速キャンパス、コード+アルゴリズムの授業