객체 : 성질(변수), 할 수 있는 행동(함수)이 담긴 지표

       : 필요한 변수와 함수가 담긴 지표

 

클래스 : 객체를 만들 수 있는 틀 

           객체가 갖고있는 변수 = 필드

           객체가 행하는 함수 = 메서드

 

인스턴스 : 클래스라는 틀로 찍어낸 객체, 피조물

 

 

1. 클래스 정의 하기

class Human():
	name = "Undefined"
    age = 0
    def birth(self):
    	print("응애")

Human 이라는 클래스를 만들었다.

name 과 age를 변수로 갖는다.

초기값을 지정해 주었다.

birth라는 함수 = 메서드를 갖는다.

birth(self)에서 "self"는 이 정의가 메서드라는 걸 알려준다.

 

 

2. 위에서 정의한 Human이라는 클래스 틀로 Jane이라는 객체를 찍어냈다.

찍어낸 객체인 Jane 이 바로 인스턴스이다.

Jane = Human()
Jane.name = Jane Kim
Jane.age = 10
Jane.birth()
# 결과 : 응애

Human에서 정의한 name 과 age 변수를 재정의 또는 사용하려면

Jane.name / Jane.age 로 사용할 수 있다.

메서드 또한 Jane.birth로 사용할 수 있다.

 

※헷갈렸던 부분

 

1. 한 객체의 메서드에서 그 객체의 필드를 참조할 땐 self를 이용해서 참조해야 한다.

= 클래스를 생성하면서 내부에 정의한 변수를 메서드에서 받아서 사용할 때

class Human():
	age = 10
    def introduce(self):
    	print(self.age, "살 입니다")

Jane = Human()
Jane.introduce() 

# 결과 : 10살 입니다.

 

2. 매개변수를 입력받는 경우의 메소드 정의 방법

= 클래스를 생성하면서 내부에 정의한 변수를 메서드에서 받아서 사용 + 매개변수 입력이 필요한 메서드

class Human():
    name = "Ud"
    age = 0
    def introduce(self, a,b):
        self.name = a
        self.age = b
        
Jane = Human()
Jane.introduce("제인",3)
print(Jane.name,"입니다.",Jane.age, "살 입니다.")

# 결과 : 제인 입니다. 3 살 입니다.

코딩을 하다보면 더하기 빼기 곱하기는 별 문제가 없는데,

 

나만 그런건지,, 항상 나누기 관련된 연산자들이 헷갈린다.

 

1. 나누기 연산 : /

 

2. 몫 구하기  : //

 

3. 나머지 구하기 : %

 

print(4/2) # 결과 : 2.0
print(2/4) # 결과 : 0.5

print(2//6) # 결과 : 0
print(6//2) # 결과 : 3

print(2%9) # 결과 : 2
print(9%2) # 결과 : 1

막연하게 코딩을 하다보면 시퀀스가 정확히 뭔지도 모르고 시퀀스 시퀀스.. 한다.

 

막연하게 시퀀스? 순서지 뭐 

 

순서같은거야

 

하는데,

 

이번기회에 시퀀스에 대해 정리를 좀 해보려 한다.

 

시퀀스를 정의 하는 것 보다는 실제 사용되는 것들을 예시로 들어 설명하려 한다.

 

[시퀀스의 종류]

 

1. 문자열 "MyLifeIsWonderful"

2. 리스트 ['a','b','c','d','e']

3. range(3,10)

4. 튜플 (1,2,3,4,5)

5. 딕셔너리 {"빨강":1, "주황":2, "노랑":3}

 

위의 5가지가 모두 시퀀스 이다.

 

[시퀀스의 특징]

 

1. 인덱스가 있다. 하나의 요소요소가 인덱스 0 부터 카운트 되는 것

 

2. 슬라이싱이 가능하다 [3:6] : 인덱스3이상 6미만으로 자르기

 

3. in 을 사용할 수 있다,

for문에서 많이 사용하는 in 을 사용할 수 있다.

for i in "MyLifeIsWonderful":

i 가 순서대로 M -> y -> L -> i -> f -> e -> I -> s -> W -> o -> n -> d -> e -> r -> f -> u -> l  이 되는 것이다.

 

4. len(시퀀스이름) 함수를 사용하여 시퀀스의 크기, 길이 를 구할 수 있다.

 

5. 더하기(+) : 이어 붙이기 , 곱하기(*) : 반복 하기  가능하다

 

[리스트를 문자열로 바꾸기 & 문자열을 리스트로 바꾸기]

1. string.split('c') : string (특정 문자열)을 c (특정 글자나 특수문자)를 기준으로 잘라서 리스트로 만들기

string = 'TomandJerry'
string.split('and')

# 결과 : ['Tom', 'Jerry']

 

2. string.join(list) : 리스트(list)의 원소들을 특정 string으로 연결지어서 문자열로 만든다

my_list = ['Tom', 'Jerry']
my_string = '&'.join(my_list)

# 결과 : my_stirng = Tom&Jerry

리스트를 다루다보면, 괄호()안에 인덱스를 넣어야 하는지, 데이터값을 넣어야 하는지 헷갈릴 때가 많다.

 

[데이터값을 넣는 메서드]

 

1. list.append(d) : 맨 뒤에 한 개의 자료만 추가

my_list = [1,2,3]
list.append(7)

# 결과 : my_list = [1,2,3,7]

 

2. list.remove(d) : 리스트 안에 있는 d를 삭제, 중복되는 경우 인덱스가 작은 것(앞에 있는 것) 1개를 삭제

리스트 안에 d가 없는 경우 에러 발생

my_list = [2,3,4,3,3,5]
my_list.remove(3)

# 결과 my_list = [2,4,3,3,5]

 

3. list.count(d) : 리스트 안에 있는 특정 데이터의 개수 세기, d의 개수 세기

my_list = [3,3,4,4,5,3,3]
my_list.count(3)

# 결과 : 4

 

 

[인덱스를 넣는 메서드]

 

1. list[a:b] : 리스트 슬라이싱, 인덱스 a이상, 인덱스 b미만으로 자르기, 리스트 자르기

my_list = ["빨", "주", "노", "초", "파"]
my_list2 = my_list[1:3]

# 결과 : my_list2 = ["주", "노"]

 

2. del list[i] : 인덱스 i 원소 삭제, 리스트에서 인덱스로 삭제하기, 리스트 데이터 삭제하기, 대괄호[]임

my_list = [4,2,56,3,12,6]
del my_list[3]

# 결과 : my_list = [4,2,56,12,6]

 

3. list.pop(i) : 인덱스 i의 원소 제거 후 그 원소를 반환, 리스트 인덱스로 원소 뽑아내기

괄호()안이 공백일 경우, 마지막의 원소를 제거 후 반환

my_list = ["빨", "주", "노", "초", "파", "남", "보"]
a = my_list.pop(3)

# 결과 : a = "초"
# 결과 : my_list = ["빨", "주", "노", "파", "남", "보"]

b = my_list.pop()

# 결과 : b = "보"
# 결과 : my_list = ["빨", "주", "노", "파", "남"]

 

[인덱스와 데이터값 모두 필요한 메서드]

 

1. list.insert(i,d) : 인덱스i 앞에 데이터 d를 넣는다. 리스트 원하는 위치에 데이터 입력하기, 리스트 중간에 데이터 삽입

 my_list = ['a','b','c','d']
 my_list.insert(2,77)
 
 # 결과 : my_list = [a','b',77,'c','d']

 

[인덱스와 데이터값 필요 없는 메서드]

1. list.sort() : 리스트 오름차순 정렬, 리스트 사전순 정렬

2. list.reverse() : 리스트 뒤집기, (내림차순 아님) 원래있던 리스트를 거꾸로 뒤집는 것

3. list.clear() : 리스트 비우기

+ Recent posts