코드 설명)
list1 = [1, 2, 3]
list2 = [1, 2, 3]
if list1 is list1: #자기 자신은 자기 자신과 같으므로 True
print("당연히 list1과 list1은 같은 인스턴스입니다.")
if list1 == list2: #각 인덱스 데이터 비교 후 같으면 True
print("list1과 list2의 값은 같습니다.")
if list1 is list2: #데이터는 같아도 다른 인스턴스 이므로 False
print("그리고 list1과 list2는 같은 인스턴스입니다.")
else:
print("하지만 list1과 list2는 다른 인스턴스입니다.")
당연히 list1과 list1은 같은 인스턴스입니다.
list1과 list2의 값은 같습니다.
하지만 list1과 list2는 다른 인스턴스입니다.
list1 = list(range(10))
list2 = [1, 2, 3]
if isinstance(list1, list) and isinstance(list2, list):
print("list1과 list2는 둘 다 list클래스 입니다.")
#둘다 list 클래스의 인스턴스들로 볼 수 있으므로 True
list1과 list2는 둘 다 list클래스 입니다.
class Human():
'''사람'''
#a=list() 리스트 인스턴스 저장 , list클래스 사용
person1=Human()
#클래스 호출하기, 리스트 인스턴스 저장과 비슷,
#person1을 Human 클래스의 인스턴스로 만듬
person2=Human() #인간 클래스의 인스턴스가 person2에 생긴다.
person1.language='한국어' #클래스에 language 인스턴스 추가
person2.language='English'
print(person1.language)
print(person2.language)
person1.name='서울시민' #클래스에 name 인스턴스 추가
person2.name='인도인'
#클래스와 인스턴스를 이용하면 데이터와 코드를 이용자가 이해하기 쉽도록 포장가능
def speak(person):
print('{}이 {}로 말을 합니다.'.format(person.name,person.language))
Human.speak=speak #Human.speak를 클래스의 함수로 만드는데 기존의 함수 speak를 사용
person1.speak()
person2.speak()
#speak(person1)
#speak(person2)
#Human.speak=speak 코드가 없고 외부 함수를 통해 클래스의 정보를 출력하는 경우
한국어
English
서울시민이 한국어로 말을 합니다.
인도인이 English로 말을 합니다.
class Car():
'''자동차'''
taxi = Car()
taxi.name="택시" #name 인스턴스를 생성하고 "택시"대입
*모델링 : 클래스로 현실의 개념을 표현하는것
ex)
class Human():
'''Person''' #써주지 않으면 def로 함수시 IndentationError 발생(구문 오류)
# person=Human()
# person.name='철수'
# person.weight=60.5
#매번 이렇게 적어주기 어려움
def create_human(name,weight):
person=Human()
person.name=name
person.weight=weight
return person
Human.create=create_human #human 관련 함수를 human클래스에 넣는 행위 매개변수의 형태도 그대로
person=Human.create('철수',60.5)
# person=create_human('철수',60.5) 내부함수화 안하면 이렇게
def eat(person):
person.weight+=0.1
print('{}가 먹어서 {}kg이 되었습니다'.format(person.name,person.weight))
def walk(person):
person.weight-=0.1
print('{}가 걸어서 {}kg이 되었습니다'.format(person.name,person.weight))
Human.eat=eat
Human.walk=walk
person.walk() #이경우 person에게 일을 시키므로 따로 매개변수는 넣지 않아도 됨
person.eat()
person.walk()
철수가 걸어서 60.4kg이 되었습니다
철수가 먹어서 60.5kg이 되었습니다
철수가 걸어서 60.4kg이 되었습니다
예시)
class Human():
'''Person'''
def create(name,weight):
person=Human()
person.name=name
person.weight=weight
return person
def eat(self):
self.weight+=0.1
print('{}가 먹어서 {}kg이 되었습니다'.format(self.name,self.weight))
def walk(person):
self.weight-=0.1
print('{}가 걸어서 {}kg이 되었습니다'.format(self.name,self.weight))
def speak(self,message):
print(message)
#python에서는 보통 메소드의 첫번째 인자는 self로 씀
def eat(self):
self.weight+=0.1
print('{}가 먹어서 {}kg이 되었습니다'.format(self.name,self.weight))
person=Human.create('철수',60.5)
eat(person)
#클래스 외부 eat함수 사용시에는 person을 인자로 넣어야 함 메소드 eat의 self로 전달됨
person.eat()
#person이라는 인스턴스의 eat호출 위줄과 같은 결과 출력
#이 경우는 실행 됨, person이라는 인스턴스가 메소드 eat의 self로 전달되기 때문
person.speak("안녕하세요.")
#self에 자동으로 person인자가 전달되고 그이후에 "안녕하세요"가 전달되기 때문에 실행가능
철수가 먹어서 60.6kg이 되었습니다
철수가 먹어서 60.7kg이 되었습니다
안녕하세요.
class Car():
'''자동차'''
def run(self):#self 키워드를 이용해 자동으로 인스턴스 정보 전달
print("{}가 달립니다.".format(self.name))
taxi = Car()
taxi.name = "택시"
taxi.run() #self 로 인해 외부에서는 매개변수 없이 사용가능
택시가 달립니다.