[TIL] Python_2

나의 개발 일지·2024년 2월 19일

BootCamp

목록 보기
2/13

2024.02.19

오늘 학습한 내용 : class에 대하여...


1. Pass에 대하여

  • pass는 하나의 클래스, 함수, 조건문, 반복문등의 내용을 추후 정하고 다른 부분을 먼저 할때 넘어가기 위해 사용 즉, 비즈니스 로직의 전반적인 형식을 형성하기 위해 사용하는 경우가 많다.

  • 비지니스 로직 : 구현하려는 로직을 의미 -> 클래스는 여러개의 비지니스 로직을 하나로 묶었다고 봐도 무방하다.
    ex.


  class Something():
      def __init__(self):
          pass

      def something(self):
          pass

2. 생성자 init(self)에 대하여

  • 초기화 : 값을 최초로 할당하는 과정
  • 객체 초기화
    • 생성자에 메소드에 사용할 주요 파라미터를 설정하여 클래스의 객체를 호출함과 동시에 생성자 메소드가 호출되어 주요 파라미터가 초기화된다.
    • 객체를 초기화하면 클래스 객체를 호출하고 메소드의 특정 변수의 값을 따로 초기화하는 과정이 필요없음. 즉, 객체를 생성하고 유동적으로 필요한 해당 변수의 값을 매번 선언을 안하고 사용이 가능 (객체지향)
    class Bicycle():
      # 생성자
      def __init__(self,size,color,speed):
        self.wheel_size = size
        self.color = color
        self.speed = speed 
        print("생성자 호출!")

      def move(self):
        print(f"속도는 {self.speed} 입니다.")

    k = Bicycle(20,20,20)
    k.move()

Result>

  생성자 호출!
  속도는 20 입니다.

3. 인스턴스 변수 vs 클래스 변수

  1. 인스턴스 변수(Instance Variable)
  • 특정 객체(인스턴스)에 속하는 변수
  • 각 객체마다 고유한 값을 가지고 주로 객체의 상태나 속성을 나타냄
  • self 키워드를 사용하여 정의됨
  1. 클래스 변수(Class Variable)
  • 클래스 자체에 속하는 변수
  • 클래스 내의 모든 인스턴스가 공유하는 변수
  • 주로 클래스 수준의 데이터를 저장하거나 공유하는 데 사용

  class Car():
    class_count = 0   # 클래스 변수 -> 클래스로 접근하면  객체와 상관없이 다 영향을 미친다. 
    def __init__(self,instance_count, speed):
      self.instance_count = instance_count
      self.speed = speed 

    def move(self):
      Car.class_count = 20 # 클래스 변수는 클래스명.변수로 선언 
      return f"스피드 : {self.speed}, class_count : {Car.class_count}, instance_count : {self.instance_count}"

  car = Car(10,5)
  print(car.move())
	

Result>

  스피드 : 5, class_count : 20, instance_count : 10

4. 정적 메소드(static method), 클래스 메소드(class method)

1. 정적 메소드(Static method)

  • 클래스에 속하지만 클래스나 인스턴스와 무관하게 독립적으로 동작하는 메소드
  • @staticmethod를 사용한다
  • 변수나 인스턴스 변수에 접근이 불가능하다
	#형태
    @staticmethod
    def 메소드명(인자1,인자2,...):
    	함수내용
        
    #호출
    클래스명.메소드명(인자1,..)

예제>


  class Car():
    @staticmethod
    def check_type(model_code):
      if(model_code >= 20):
            print("이 자동차는 전기차입니다.")
      elif(10<= model_code < 20):
            print(" 이 자동차는 가솔린차입니다.")
      else:
            print(" 이 자동차는 디젤차입니다.")

  Car.check_type(25)
  Car.check_type(2) 
  

Result


 이 자동차는 전기차입니다.
 이 자동차는 디젤차입니다.

2. 클래스 메소드(Class method)

  • 클래스 변수를 사용하기 위한 함수
  • @classmethod를 사용한다
  • 클래스 전체에서 관리해야할 기능이 필요한 경우 사용
	#형태
    @classmethod
    def 메소드명(cls): 
      함수내용(cls.클래스변수~)
      
    # 호출
    클래스명.메소드명(인자1...)

예제>


  class Car():
    class_count = 0    # 클래스 변수 -> 클래스로 접근하면  객체와 상관없이 다 영향을 미친다. 
    def __init__(self):
      self.instance_count = Car.class_count = Car.class_count + 1 # 객체를 호출할 때마다 클래스변수가 1씩 증가하여 증가 

    @classmethod  
    # 클래스안에서 클래스변수를 사용하려면 Car 이름으로 사용해야 하는데 
    # Car 이름 없이 사용하려는 목적 
    def count_increase(cls):
      print(cls.class_count) 
      
  # 클래스 메소드의 함수호출
  Car.count_increase()

  # 인스턴스를 이용한 객체 생성 및 호출
  k = Car()
  k.count_increase()

5. 상속

  • 기존의 클래스(부모 클래스)를 이용해서 새로운 클래스(자식 클래스)를 만든다 (확장의 개념)
  • 부모클래스의 생성자를 사용하기 위해 다음을 사용한다.

	super().__init__(부모생성자 인자1, 인자2, ...)
    

    class Person():
      def __init__(self,age,name):
        self.age = age
        self.name = name
        print("부모 생성자")                  

      def study(self):
        pass

    class Student(Person):                     # 상속할 부모 클래스 명을 자식 클래스()에 넣어준다 .
      def __init__(self,age,name,score):
        super().__init__(age, name)            # 부모의 생성자 호출 --> 부모 클래스의 생성자 내용이 자식클래스 객체호출시 나와야한다. 
        self.score = score
        print("student 생성자")

    class Teacher(Person):
      def __init__(self,age,name,students):
        super().__init__(age, name)
        print("teacher 생성자")
        self.students = students

      def teaching(self):
        pass


    s = Student(10, '홍길동', 80)
    s.study()
    s.age
    t = Teacher(27,'이진수', '홍길동')
    t.study()
    t.students

Result>

  부모 생성자
  student 생성자
  부모 생성자
  teacher 생성자
  홍길동

0개의 댓글