python

[python] 클래스 변수 | 클래스 매서드

전감자(◔◡◔) 2022. 9. 26. 21:12
'''

클래스 변수

1. 메서드 밖에서 선언한 변수 의미
2. 프로그램 실행 시 생성 ~ 프로그램 종료시 제거된다.
3. 객체 생성과 무관
4. 참조는 클래스명.클래스변수 형식으로 사용한다.
5. 용도는 누적용(여러 인스턴스가 공유해서 누적하면서 사용하는 용도)

'''

class Cat:
    x=10
    def __init__(self,name,age):# 인스턴스 메서드 ==> 객체 생성후에 사용가능하다.
        self.name=name
        self.age=age

    def cum_up(self): #인스턴스 메서드 ==> 객체 생성후에 사용가능하다.
        Cat.x=Cat.x+1
        self.age=self.age+1

print(Cat.x)# 클래스 변수는 객체생성과 무관하다.
# 객체 생성
c1=Cat("야옹이",2)
c1.cum_up()
print("클래스 변수 x:",Cat.x)
print("인스턴스 변수 age:",c1.age)
c2=Cat("나비",3)
c2.cum_up()
print("클래스 변수 x:",Cat.x)
print("인스턴스 변수 age:",c2.age)

'''

클래스 매서드

1. 문법

    class 클래스 명:
        @classmethod #decorator (자바는 annotation)
        def 클래스 매서드명 (cls):
            pass
        ==> 프로그램 실행시 생성~ 프로그램 종료시 제거
        ==> 사용방법:
            클래스명.클래스매서드() 형식으로 사용한다.
        ==> 용도:
            - 객체 생성 없이 매서드 사용하기 위해서

        def 인스턴스 매서드(self):
            pass
        ==> 객체 생성시 인스턴스 매서드가 생성됨.
        (객체 생성 후에 사용이 가능하다.
         사용방법: self.인스턴스 매서드
                 c1.인스턴스 매서드)
'''


class Cat:


    @classmethod
    def kkk(cls):
        print("cls 주소값",id(cls))
        print("kkk")

    #인스턴스 매서드
    def a(self):
        self.b() #같은 클래스 내에서 인스턴스 매서드 호출은 self.매서드명(인스턴스 변수 사용과 동일)
        print("self 주소값:",id(self))
        print("a")

    def b(self):
        print("b")


Cat.kkk() # 객체 생성 전에 사용이 가능함
print("Cat 주소값:",id(Cat))

c1=Cat()

print("c1 주소값:",id(c1))

c1.a()
c1.b()
    x = 10  # 클래스 변수 ==> 접근 방법 2가지 (내부: cls.x, 내외부:Cat.x)

    @classmethod
    def y(cls): #클래스 매서드==> 접근 방법 2가지 (내부: cls.y(), 내외부:Cat.x)
        print("x 값 접근1:",cls.x)
        print("x값 접근2:",Cat.x)
        #print(self) 에러 이유는 클래스 변수 및 매서드가 인스턴스(self) 보다 먼저 생성되기 때문이다.


    def k(self):
        print("k에서 x접근:",Cat.x) #실행되는 이유는 인스턴스 매서드(k)보다 클래스 변수인 x가 먼저 생성되기 때문이다.



Cat.y() #클래스 매서드 접근
print(Cat.x)

c1=Cat() #인스턴스 매서드 접근
c1.k()

'python' 카테고리의 다른 글

[python] class 메서드 오버라이딩  (0) 2022.09.26
[python] class 상속 (inheritance)  (0) 2022.09.26
[python] class 중간 정리  (0) 2022.09.26
[python] class 객체생성 | 생성자  (0) 2022.09.26
[python] filter vs map  (0) 2022.09.26