class Student:
def ins_method(self, name):
self.name = name
# 첫번째 인자로 인스턴스를 받기 때문에 메서드 안에서 인스턴스를 사용 할 수 있다.
@classmethod
def cls_method(cls, age):
cls.age = age
# 첫번째 인자로 클래스를 받기 때문에 클래스를 메서드 내에서 사용할 수 있다.
@staticmethod
def sta_method(nation):
print(nation)
def foo(self):
print("this is foo")
print(self)
def foo2():
print("this is foo2")
Student # 클래스
Student() # 인스턴스
a = Student() # 인스턴스
인스턴스 메소드
a = Student()
b = Student()
a.ins_method("James")
b.ins_method("Timmy")
print(a.name)
print(b.name)
output:
James
Timmy
# 인스턴스 메소드는 인스턴스 별로 구분이 가능하도록 한다.
print(Student().name)
print(Student.name)
output:
AttributeError: 'Student' object has no attribute 'name'
# 인스턴스에서의 수정은 클래스에 영향을 미치지 않는다.
Student().ins_method("Amy")
print(Student().name)
# 인스턴스 메소드를 인스턴스를 변수에 바인딩하지 않은 채로 사용해 본 결과 메소드는
# 사용이 되나 인스턴스 변수에 접근할 방법이 없다. 바인딩을 하는 변수로 접근해야 하는데 그게 없으니
# 특정이 안되서 그러는 것 같다. 모호성
인스턴스.인스턴스메소드()
자동으로 첫번째 인자를 인스턴스로 받음.
클래스.인스턴스메소드(클래스/인스턴스)
인자로 클래스를 넣어준 경우 클래스 단위로 영향을 준다.
클래스/인스턴스.클래스메소드()
자동으로 첫번째 인자를 클래스로 받고 어떤식으로 접근해도 클래스에 접근하게 됨
클래스/인스턴스.스태틱메소드() # 데코레이터로 만든
인스턴스를 통해서도 접근 가능한 메소드. 클래스를 통해서 관련성 있는 함수들을
묶기 위해 사용함.
클래스.스태틱메소드() # 클래스 안에 썼지만 self 없이 빈괄호로 만든 메소드
클래스를 통해서만 접근 가능함, 앞에 인스턴스를 쓸 경우 인스턴스가 자동으로
인자로 들어가서 오류가 나온다.