알쏭달쏭 공부한거 쓰기
7/6 수업 내용 본문
#객체 프로 그래밍
https://colab.research.google.com/drive/1NrGiqH2bslaVbRPzDg-hohmWBQuf83L9#scrollTo=gfyr4peyS4il
객체>class 클래스명:(보통 대문자)
#속성
def__init__() #이런 __있는 함수 speacial 매소드 보통 직접 부르기 보다는 자동으로 불러진다.
self. 속성이름 #인스턴스 변수
#동작:메소드(동일한 함수인데 클래스 안에 쓰일때 매소드라고 불림)
def 함수명 (self, 매개변수)
내용
#강아지 프로그래밍하기
1.속성은 private 하게 내부에서는 접근 가능, 외부에서는 접근 하지 못하게 만들어야한다.
밖에서 바꿀수 없게
외부에서 속성이 궁금할때. getter()
외부에서 바꿀수 있는 속성에 대해서 바꿀때 . setter()
2.스페셜 메소드
__str__()는 print(객체명)하면 자동으로 불린다.
print(객체명) ==print(__str__)
3.연산자와 스페셜 메소드
>>>3+4
7
사실 (3).__add__(4) #정수는 ()해야함
에서 특수 메소드 ___add__ 를 호출한 것이다.
강아지 두 개를 더해달라 강아지와 강아지의 +연산을 지원하지 않는다. +를 할 수 있으려면
add라는 speacial 메소드가 정의 되야함
그럼 정의해보다
강아지 두개를 더해달라는 것은 두 강아지의 나이의 합이라고 하자#말이 안되지만 그냥 설명하기 위해서
lt=less than
le=less equal
lt-gt
le-ge
둘이 쌍이므로 둘중에 하나만 정의 하면 나머지는 알아서 된다.
eq-!eq
+>== 이거 세개 구현하는 거 시험에 냈다고함
1. private하지 않을 경우
{'width':100,'height':200}
100
2.private한 경우 속성 앞에_있느냐 없느냐 차이
{'_Test__width':100,'_Test__height':200}
100
class Test:
def __init__(self,a):
self.__a=a
t=Test(3)
print(t.__dict__)
print(t.__a)
print(t._Test_a)
._a> _1개는 안되지만 파이썬에서 막지 않음
.__a>_2개는 파이썬에서 막음>파이썬에서 __a>_Test__a로 바꿔버린다.
강의 자료에 없음
대화형모드에서
print(d1)은 제대로 나오는데
d1이라고 치면 제대로 나오지 않는데
이거랑 리스트 부르면 안에 나오는 거랑 비슷함
이때 d1만 치고 제대로 나오게 하고 싶으면
def __repr__(self):
return f'{d1} '
실습
1. 아래 코드의 오류를 수정하시오
(1)
```
class MyClass:
def __init__(self):
self.radius = 10
```
'''
radius는 인스턴스 변수>_이나__ 붙여주자
'''
(2)
```
class MyClass:
def __init__(self, r):
self.__radius = r
def get_radius(self):
return self.__radius
a = MyClass(10)
print(a.__radius)
print(a.get_radius())
```
'''
get으로 속성에 직접 접근하지 않은 것은 좋지만 구현이 안되어 있다.>완료
'''
파이썬은 얕은 복사 지원
대입만하면 주소를 넣음
org=list(range(1,11))
cpy=org
cpy.reverse()#원본 바꿈 #[10,..,1]
org=[10,...,1]
둘이 동일한 객체에 대해 같은 주소를 가지고 있는데 그 객체를 reverse해서 원본도 바뀌어보림
깊은 복사
import copy
cpy=copy.deepcopy(org)
cpy.reverse()
cpy=[10,....,1]
org=[1,...,10]
아니면 직접 작성
cpy=[]
for x in org:
cpy.append(x)
이렇게 생성된 리스트는 org와 cpy와 다른 리스트이다.
is는 같은 주소(id)에 대해 물어봄. 같은 객체인가?
==는 내용상 같은 지를 물어보는 것이다.
ex) class person:
속성 :이름, 나이
is 동일인물?>20세 홍길동(A) is 20세 홍길동 (B)>False
== 이름, 나이 20세 홍길동(A) == 20세 홍길동 (B)> True
mutable 객체(리스트)에서 is 비동일 ==
리스트에서는 같은 내용의 리스트라도 변경이 가능한 객체라도 따로 따로 만들 수 밖에 없다
immutable 객체(상수-튜플, 문자열,정수,실수,부울)에서 is 동일 ==
문자열 같은 경우에는 내용 변경이 불가능함으로 다른 주소를 줄 필요가 없어서 동일한 객체의 주소를 받음
아까 정수랑 리스트 원본 변경시 카피본 변경여부에대해 설명할 수 있을 듯
'파이썬 -23여름학기(ㄱㅎㅈ)' 카테고리의 다른 글
23 파이썬 기말 족보 (0) | 2023.07.06 |
---|---|
22 파이썬 기말 족보 (0) | 2023.07.06 |
유튜브 -파이썬 , class (0) | 2023.07.06 |
23 여름 중간 풀이 (0) | 2023.07.05 |
7/5 파이썬 수업-딕셔너리,객체와 클래스 (0) | 2023.07.05 |