class person:
눈 = 2
코 = 1
입 = 1
배부름 =0
def exercise():
print("운동중")
def 밥먹기(밥먹는량):
person.배부름 = person.배부름 + 밥먹는량
print ("소화중")
class jack(person):
def 공부하기():
print ("공부중")
class tom(person):
def 게임하기():
print("게임중")
jack.밥먹기(3)
tom.밥먹기(3)
print (jack.배부름)
이개 내가 처음에 짲던 코드임
여기서 jack.밥먹기를 하면 jack.배부름이 오르는게 아니라 person.배부름이 오름
이걸 일단 방지하기 위해서
class person:
눈 = 2
코 = 1
입 = 1
배부름 =0
def exercise():
print("운동중")
def 밥먹기(밥먹는량):
person.배부름 = person.배부름 + 밥먹는량
print ("소화중")
jack = person()
tom = person()
이런 식의 코드를 만들어서 3개의 객체를 만든다음 각각을 독립되게 만듬
class person:
눈 = 2
코 = 1
입 = 1
배부름 =0
def exercise():
print("운동중")
def 밥먹기(밥먹는량):
person.배부름 = person.배부름 + 밥먹는량
print ("소화중")
jack = person()
tom = person()
jack.밥먹기(3)
print(jack.배부름)
그다음에 이런 코드를 짜면
jack.밥먹기(3)
TypeError: 밥먹기() takes 1 positional argument but 2 were given
이런 오류가 뜨는데 이게 인자를 하나 받는대 두개의 인자를 준다는 것임 이걸 해결하기 위해서 구글링을 함
구글링 하는중에 self 를 첫번째 인자에 사용하면 된다길레
class person:
눈 = 2
코 = 1
입 = 1
배부름 =0
def exercise():
print("운동중")
def 밥먹기(self,밥먹는량):
person.배부름 = person.배부름 + 밥먹는량
print ("소화중")
jack = person()
tom = person()
jack.밥먹기(3)
print(jack.배부름)
이렇게 짬 근데 이렇게 짜도 각각이 독립이 안됌
그래서 마지막으로
class person:
눈 = 2
코 = 1
입 = 1
배부름 =0
def exercise():
print("운동중")
def 밥먹기(self,밥먹는량):
self.배부름 = self.배부름 + 밥먹는량
print ("소화중")
jack = person()
tom = person()
jack.밥먹기(3)
print(jack.배부름)
이렇게 짜면 가상의 self 변수의 값을 넣는다(이거 아닐수도 있음)
이렇게 하니까 'jack.밥먹기' 를 해도 tom.배부름에 영향 안끼치더라
귀엽
인스턴스의 참조를 넘겨줘야 되나보내요
그런듯
self 인스턴스 자신임
그게 무슨말임?
tom jack 얘네가 Person 클래스로 만든 인스턴스인데 tom.밥먹기()하믄 tom 스스로가 self에 해당한다구
이해하기 힘드네요
다시 읽어보니까 무슨말인지 알겠슴
그래서 객체지향 이구나
내가 좀 허접하게 설명함 쏘리
1. class Person으로 class 명은 camel case로 할 것 2. 눈, 코, 입, 배부름은 class attribute임 __init__ 메소드를 넣어 self.눈 등으로 짜서 instance attribute로 변경(class attribute로 짜야할 경우인 경우 예외) 3. exercise method는 instance 변수를 참조하지 않는 staticmethod 이므로 아예 밖으로 빼던가 @staticmethod를 붙임
감사합니다
추천!
아니 요즘에는 기본개념도 안보고 프로그래밍하냐??
탐구하는 과정은 좋은데 기본적인 부분은 클론코딩하기전에 강의라도 보고 해보셈...
에휴 그냥 첫번째 인자로 자기 인스턴스의 참조를 받는거다