Human 클래스를 선언해보자

class Human:
    # 클래스 속성
    greeting = 'Hello'

    # 초기화/인스턴스 속성
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def cmethod():
    	print('클래스 메소드 호출')
    
    def imethod(self):
    	print('인스턴스 메소드 호출')

다음으로 Human 클래스를 인스턴스화 해보자

a = Human('so', 20)
a2= Human('so', 20)
b = Human('yeon', 21)

print(a==a2)

Flase

 

a와 a2로 인스턴스화할 때 같은 값을 넣어줬지만 다르다!

id()를 사용해 객체의 고유 주소 값을 확인해봐도 다른 값이 들어있다.

 

인스턴스 속성  

인스턴스 속성을 확인해보자

print('my name is {}'.format(a.name))
print('{}'.format(b.age))

so

21

클래스 속성  (직접 접근)

클래스 속성은 직접 접근이 가능하다

print(Human.greeting)

Hello

 

클래스 속성의 값을 변경해보고 인스턴스화 된 변수로 접근해보자

Human.greeting += ' !'
print(a.greeting, b.greeting)

Hello ! Hello !

 

각 인스턴스 속성도 변경된 것을 확인할 수 있다.

 

a.greeting += '!!!'
print(a.greeting, b.greeting, Human.greeting)

Hello !!!! Hello ! Hello !

 

반대로 a.greeting을 변경하면 공유되지 않는다.

 


+ 인스턴스 변수명과 클래스 변수명

class Human():
    cnt = 1

    def __init__(self):
        self.cnt = 0

Sso = Human()
print(Sso.cnt)
print(Human.cnt)

0

1

 

인스턴스 변수와 클래스 변수명이 같아도 된다.

인스턴스에서 먼저 찾은 후 상위에서 찾게 된다.

class Human():
    cnt = 1

Sso = Human()
print(Sso.cnt)
print(Human.cnt)

1

1


 

클래스 메소드

간단하게 말해서 self가 붙으면 인스턴스만의 속성과 메소드가 되고
self가 붙어있지 않으면 클래스의 속성과 메소드가 된다.

 

클래스 메소드는 클래스로 직접 호출을 해야한다.

# a.cmethod()
Human.cmethod()

a.cmethod()로 접근하면 에러가 난다.

 

인스턴스 메소드

인스턴스 메소드인 imethod를 보면 매개변수로 self를 받는다.

객체를 생성한 후 self에 인스턴스를 넘겨줘야 한다.

 

# Human.imethod()
Human.imethod(a)
a.imethod()

Human.imethod()로 접근하면 에러가 난다. (인스턴스를 넘겨주지 않았기 때문)

따라서 위에 생성한 인스턴스 a를 넘겨주거나       :      Human.imethod(a)

인스턴스 자체로 호출하는 방법이 있다.      :      a.method()

 

 

'Python > 파이썬 초급' 카테고리의 다른 글

[Python] from과 import  (0) 2023.05.22
[Python] 생성자 소멸자  (0) 2022.11.20
[Python] import  (0) 2022.11.19
[Python] 가변인자  (0) 2022.11.14
[Python] for-else 문  (0) 2022.11.11