1. instance
2. static
3. class
class Test:
def __init__(self, name, age):
self.name = name
self.age = age
def print_info(self):
print(self.name, ',', self.age) #1
def test_func(self):
self.print_info()
test1 = Test('hong', 22)
test1.print_info() #2 hong , 22
test1.test_func() #3 hong , 22
[ 호출 방법 ]
#1, #2 클래스.메서드()
class Calc:
count = 10 #클래스 변수
@staticmethod
def add(a):
print(a + Calc.count) #클래스 속성(Calc.count)에는 접근 가능
@staticmethod
def mul(a):
print(a * Calc.count)
Calc.add(10) #1
>>>20
Calc.mul(10) #2
>>>100
[ 호출 방법 ]
# 클래스.메서드()
class Person:
count = 0 # 클래스 속성
def __init__(self):
Person.count += 1 # 인스턴스가 만들어질 때
# 클래스 속성 count에 1을 더함
@classmethod
def print_count(cls):
print('{0}명 생성되었습니다.'.format(cls.count)) # cls로 클래스 속성에 접근
@classmethod
def create(cls):
p = cls() # cls()로 인스턴스 생성
return p
james = Person()
maria = Person()
Person.print_count() # 2명 생성되었습니다.
Person.create() # cls()로 인스턴스 생성
Person.print_count() # 3명 생성되었습니다.
.
오퍼레이터를 붙여서 호출 가능상속 관계에서 클래스 메소드의 경우 cls인자를 활용하여 현재클래스 속성을 가져온다.
스테틱 메소드의 경우 부모 클래스의 속성을 가져온다.
class Test:
default = "parent"
def __init__(self):
self.data = self.default
@classmethod
def class_test(cls):
return cls()
@staticmethod
def static_test():
return Test()
class ChildTest(Test):
default = "child"
test1 = ChildTest.class_test()
test2 = ChildTest.static_test()
print(test1.default)
print(test2.default)
#출력 결과
#child
#parent