겉바속촉
[PYTHON] 파이썬_객체 지향 이론 본문
728x90
반응형
안녕하세요
겉바속촉입니다
!^^!
!!파이썬 시작하기!!
이번에는
객체 지향에 대해서 자세하게
알아볼게요
지난 번에 여러가지 메서드들을 살펴봤으니깐요!!
2021/01/07 - [IT 일기 (상반기)/PYTHON] - [PYTHON] 파이썬_객체 지향 프로그래밍
객체 지향
캡슐화
- 데이터와 그 데이터를 사용하는 코드를 한 곳에 넣는다
- 정확히 어떻게 동작하는 지 상세한 내용은 숨김
다형성
- 하나 이상의 형태를 갖는 것
- 어떤 변수를 포함하는 표현식이 변수가 참조하는 객체의 타입에 따라 서로 다른 일을 하는 것
상속
- 새로운 클래스는 부모 클래스(object 클래스 또는 사용자 정의 클래스)의 속성을 상속
- Faculty 클래스에 __str__ 메서드 확장
다음 그림을 보시면 class Member 를 Faculty랑 Student가 상속받고 있습니다:)
그리고 상속받은 기능들 뿐만 아니라
자식 클래스는 자신만의 메소드를 또 추가해서 사용할 수 있습니다
예제
atom.py
class Atom:
'''번호, 기호, 좌표(x,y,z)를 갖는 원자'''
def __init__(self, num: int, sym: str, x: float, y: float, z:float) -> None:
self.num = num
self.sym = sym
self.center = (x, y, z)
def __str__(self) -> str:
'''(Symbol, X, Y, Z) 형식의 문자열을 반환'''
return '({}, {}, {}, {})' .format(self.sym, self.center[0], self.center[1], self.center[2])
def translate(self, x: float, y: float, z: float) -> None:
self.center = (self.center[0] + x, self.center[1] + y, self.center[2] + z)
molecule.py
from atom import Atom #위에서 정의한 atom.py 에서 Atom 클래스 사용할 거라고 선언
class Molecule:
'''이름과 원자 리스트를 갖는 분자 '''
def __init__(self, name: str) -> None:
self.name = name
self.atoms = []
def add(self, a: Atom) -> None:
self.atoms.append(a)
def __str__(self) -> str:
'''(NAME, (ATOM1, ATOM2, ...)) 형식의 문자열을 반환'''
atom_list = ''
for a in self.atoms:
atom_list = atom_list + str(a) + ', ' #atom.py의 __str__메서드 불러옴
atom_list = atom_list[:-2] #마지막에 추가된 ', ' 문자 제거
return '({}, ({}))'.format(self.name, atom_list) #분자식 구하기
def translate(self, x: float, y: float, z: float) -> None:
for a in self.atoms:
a.translate(x, y, z)
ammonia = Molecule("AMMONIA")
ammonia.add(Atom(1, "N", 0.257, -0.363, 0.0))
ammonia.add(Atom(2, "H", 0.257, 0.727, 0.0))
ammonia.add(Atom(3, "H", 0.771, -0.727, 0.890))
ammonia.add(Atom(4, "H", 0.771, -0.727, -0.890))
ammonia.translate(0, 0, 0.2)
if ammonia.atoms[0].center[2] == 0.2:
print('Equal')
else:
print('Not Equal')
# assert ammonia.atoms[0].center[0] == 0.257
# assert ammonia.atoms[0].center[1] == -0.363
# assert ammonia.atoms[0].center[2] == 0.2
# print(repr(ammonia))
print(ammonia)
그런데 원자가 너무 많아서
하나하나 대입해서 맞는 지 하기가 힘들쥬?
assert라는 것은 단정짓는 다라고 생각하면 됩니다:)
마치 exit와 같은 기능처럼 assert 문장이 맞지 않으면 그 아래 코드로 넘어가지 않고 멈추는 것입니다
그래서 다음과 같이 코드 바꿔주기
from atom import Atom
class Molecule:
''' 이름과 원자 리스트를 갖는 분자 '''
def __init__(self, name: str) -> None:
self.name = name
self.atoms = []
def add(self, a: Atom) -> None:
self.atoms.append(a)
def __str__(self) -> str:
'''(NAME, (ATOM1, ATOM2, ...)) 형식의 문자열을 반환'''
atom_list = ''
for a in self.atoms:
atom_list = atom_list + str(a) + ', '
atom_list = atom_list[:-2] # 마지막에 추가된 ', ' 문자를 제거
return '({}, ({}))'.format(self.name, atom_list)
def translate(self, x: float, y: float, z: float) -> None:
for a in self.atoms:
a.translate(x, y, z)
ammonia = Molecule("AMMONIA")
ammonia.add(Atom(1, "N", 0.257, -0.363, 0.0))
ammonia.add(Atom(2, "H", 0.257, 0.727, 0.0))
ammonia.add(Atom(3, "H", 0.771, -0.727, 0.890))
ammonia.add(Atom(4, "H", 0.771, -0.727, -0.890))
ammonia.translate(0, 0, 0.2)
#assert ammonia.atoms[0].center[0] == 0.257
#assert ammonia.atoms[0].center[1] == -0.363
assert ammonia.atoms[0].center[2] == 0.2
print(ammonia)
728x90
반응형
'IT 일기 (상반기) > PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬_크롤링 실행 파일 (0) | 2021.01.08 |
---|---|
[PYTHON] 파이썬_크롤링 (0) | 2021.01.08 |
[PYTHON] 파이썬_객체 지향 프로그래밍 (0) | 2021.01.07 |
[PYTHON] 파이썬_정렬 알고리즘 (병합정렬) (0) | 2021.01.07 |
[PYTHON] 파이썬_정렬 (선택정렬, 삽입정렬) (0) | 2021.01.07 |