TIL - 22.05.02 python class

개발자 macan·2022년 5월 3일
0

개발 - 공부

목록 보기
11/28
post-thumbnail

class란?

클래스는 마치 과자 틀과 같이 설계 도면이라고 생각하면 된다.

클래스로부터 만들어진 것이 객체(object)인데, 객체마다 고유한 성격을 지닌다.
그 말인 즉, 같은 클래스로 만들어진 객체들은 서로 영향을 주고 받지 않는다.
*인스턴스 = 객체라고 알아두자

클래스 예시 코드는 다음과 같다.

class Person:
    race = 'Human' #이건 속성
    def __init__(self,name):
        self.name = name
        def talk(self):
            print("안녕하세요")
            
a = Person()
a.__init__("염기호")

여기에서 클래스 이름은 Person이고
내부에서 init(self)라는 함수를 정의해주었다.
*클래스 내에서 정의된 함수는 메소드라고 한다.

여기서 중요한 것은 클래스 내에 메소드를 선언함에 있어서 항상 self를 넣어야하고,
뒤에 선언된 name이라는 매개변수에 대해 입력값을 정의하기 위해 하위에 수행문을
작성할 때에도
self.name = name 이라고 앞에 self를 붙여주어야 한다.
실제로 입력되고 출력되는 부분은 self 뒤의 매개변수이다.

  • 그러면 여기서 궁금한 것이 왜 self를 붙이는가?
    코드 하위부분에 a.init("염기호")에서 init메서드를 호출한 객체 a가 자동으로
    self로 전달된다. 이는 파이썬에서만 사용하는 독특한 특징이다.

    ++ a.init이 아닌 Person.init(a, "염기호")으로도 메서드를 호출할 수 있다.
    단! 이때에는 객체 a를 첫번째 매개변수로 꼭 전달해야한다.

클래스 사용 예시

class Person:
    race = "human"
    def talk(self): /* 이건 속성
        print("안녕하세요")

    def __init__(self, abc, xyz): /self를 앞에 꼭 넣어줘야한다!
        self.name = abc
        self.age = xyz
        
x = Person("염기호", 20)
print(x.name)
print(x.age)
x.talk()        

race는 속성 예시를 들고자 기입한 것이고 지금은 사용되는 코드는 아니다.

self 뒤에 name과 age를 각각 abc, xyz라고 매개변수의 입력값이 저장되도록 하였다.

클래스 이용 과제

class Circle:
    pi = 3.14

    def __init__(self, radius):
        self.radius = radius
        self.area = radius * radius * Circle.pi

    def getCircumference(self):  # 둘레를 구한다
        return self.radius * self.pi * 2

c = Circle(5)

print('반지름은 : ', c.radius)
print('넓이는 : ', c.area)
print('둘레는 : ', c.getCircumference())

여기에서 pi 앞에 Circle과 self가 있는데, Circle.pi의 경우 클래스에서 정의된 pi값을 쓴 것이고
self.pi의 경우 그 인스턴스의 pi를 쓰게 된다.
그 말인 즉, 클래스 내의 pi는 static변수로 클래스 외부에서 수정이 불가능하고 = Circle.pi
self.pi는 별다른 수정이 없을 경우 Circle.pi를 그대로 받지만, 클래스 외부에서 c.pi = 2.3이라 수정을 하면
2.3을 해당 인스턴스의 pi 값으로 한다.
profile
개발자로 첫걸음

0개의 댓글