30일간의 파이썬👨💻 - 10일째. - OOP이 없어졌어요.
슈퍼 ()
super
는 Python의 보존자(Python v2.2에 도입)로 계승 과정에서 작용한다.부류에서 계승된 자류나 자류가 부류를 호출하는 방법을 필요로 할 때 super
을 사용한다.나는 이것이 듣기에 매우 곤혹스럽다는 것을 안다.여기 예가 있어요.super
class Employee:
def __init__(self, name):
self.name = name
print(f'{self.name} is an employee')
class Manager(Employee):
def __init__(self, department, name):
self.department = department
self.name = name
Employee.__init__(self, name)
print(f'Manager, {self.department} department')
staff_1 = Manager('HR', 'Andy')
# Andy is an employee
# Manager, HR department
여기에서 부류 이름을 현식으로 사용하여 부류의 __init__
구조 함수 방법을 호출한 다음에 self
대상을 첫 번째 매개 변수로 전달합니다.super
(치밀한 문법 - 전달 불필요self
class Employee:
def __init__(self, name):
self.name = name
print(f'{self.name} is an employee')
class Manager(Employee):
def __init__(self, department, name):
self.department = department
self.name = name
super().__init__(name)
print(f'Manager, {self.department} department')
staff_1 = Manager('HR', 'Andy')
# Andy is an employee
# Manager, HR department
위 코드에서 보여준 구조 함수 방법과 같이 super()
하위 클래스 내부에서 상위 클래스를 호출하는 모든 방법을 사용할 수 있다자바스크립트에서는 문법이 더욱 치밀하다. 그 중에서
super
는 슈퍼(파라미터)라고 불린다.하지만 나도 Python 문법을 좋아한다.사용__init__
호출super
방법이 더욱 명확하다.반성하다
Python은 실행 시 객체의 유형을 평가할 수 있습니다.이것은 해석기가 대상의 속성과 방법, 그리고 실행할 때의 접근성을 동태적으로 이해할 수 있다는 것을 의미한다.이것은 내성이라고 한다.
Python은 내장 함수
dir
를 제공하여 객체를 절약합니다.class Developer:
def __init__(self, name, language):
self.name = name
self.language = language
def introduce(self):
print(f'Hi! I am {self.name}. I code in {self.language}')
dev = Developer('Matt', 'Python')
print(dir(dev)) # Try this in any Python REPL
Dunder 방법
Python에서 dunder 방법이라고 불리는 신기한 방법을 정의함으로써 클래스는 더욱 강해질 수 있다.Dunder는 double under의 약칭입니다.이 방법의 접두사와 접두사는 이중 밑줄
__
이다.이러한 특수한 방법은 Python에서 특정 용례에 대해 미리 정의한 것이다.예를 들어 우리는 내장 함수에 접근할 수 있다. 왜냐하면 이것은 특수한dunder 방법 __len__
으로 정의되어 있기 때문이다.클래스를 만들 때, 이 Dunder 방법은 내장 형식의 행동을 모의하는 데 사용할 수 있습니다.
class Sentence:
words = []
def add_word(self, word):
self.words.append(word)
def __len__(self):
return len(self.words)
new_sentence = Sentence()
new_sentence.add_word('Hello')
new_sentence.add_word('World')
print(len(new_sentence))
나는 문장 종류를 수정해서 내장 방법 len
을 사용할 수 있도록 했다. 이 방법은 기본적으로 사용자 정의 논리를 실현하는 데 사용할 수 없다.던더의 방법은 매우 편리한 것 같다!다중 상속
하나의 클래스는 다중 계승을 통해 여러 클래스로부터 속성과 방법을 계승할 수 있다.이것은 강력한 개념이지만, 그것의 경고도 있다.다중 상속은 JavaScript universe에 비해 지원되지 않습니다.
class Batsman:
def swing_bat(self):
return 'What a shot!'
class Bowler:
def bowl_bouncer(self):
return 'What a bouncer!'
class AllRounder(Batsman, Bowler):
pass
player = AllRounder()
print(player.bowl_bouncer()) # What a shot!
print(player.swing_bat()) # What a bouncer!
부류가 초기화되어야 하는 구조 함수 방법을 가지고 있을 때, 그것은 좀 복잡해질 수 있다.하위 클래스에서 모든 계승된 클래스 구조 함수 방법은 초기화되어야 한다.class Batsman:
def __init__(self, hitting_power):
self.hitting_power = hitting_power
def swing_bat(self):
return f'Shot with power {self.hitting_power}'
class Bowler:
def __init__(self, delivery_speed):
self.delivery_speed = delivery_speed
def bowl_bouncer(self):
return f'Bowled with speed of {self.delivery_speed} kmph'
class AllRounder(Batsman, Bowler):
def __init__(self, hitting_power, delivery_speed):
Batsman.__init__(self, hitting_power)
Bowler.__init__(self, delivery_speed)
player = AllRounder(90, 80)
print(player.swing_bat())
print(player.bowl_bouncer())
방법 해석 순서
메소드 해석 순서(mro)는 Python에서 상속된 속성과 메소드의 순서입니다.
여러 클래스에서 계승할 때 속성과 방법은 특정한 차원 구조 중의 하위 클래스에서 계승된다.파이썬에서 이를 실현하는 기본 알고리즘 사용Depth first search algorithm.
class Employee:
secret_code = 'secret'
class Manager(Employee):
secret_code = 'm123'
class Accountant(Employee):
secret_code = 'a123'
class Owner(Manager, Accountant):
pass
person = Owner()
print(person.secret_code) # m123
계승의 순서를 이해하기 위해 Python은 대상상에서 이 방법을 호출하여 계승의 차원 구조를 볼 수 있는 방법mro
을 제공했다print(Owner.mro()) # try in a python console with above code to see the result
다중 계승은 이해하기 어려울 수 있기 때문에 이런 모델은 실천에서 자주 사용되지 않는다.이것은 내가 몇 편의 문장에서 읽은 것이다.오늘은 이게 다야!
마지막으로 Python에서 대상 프로그래밍 개념을 완성했다.목표는 도전이 끝난 후에 내가 진정한 Python 프로젝트를 구축할 때 이러한 원칙을 실현하는 것이다.
나는 파이썬의 모든 관건적인 대상 프로그래밍 개념을 포괄하고 복잡하게 들리지 않도록 여러분과 공유할 수 있기를 바랍니다.
제가 보고 있는 영상입니다.
내일은 Python 함수 프로그래밍 분야에 깊이 들어갈 것이다.감동적일 거야.Python은 통상적으로 프로세스 언어로 대상을 대상으로 하는 개념으로 유행하지만 이번 주 남은 시간은 Python에서 함수식 프로그래밍 개념을 어떻게 실현하는지 연구할 것이다.
즐거운 시간 되세요!
Reference
이 문제에 관하여(30일간의 파이썬👨💻 - 10일째. - OOP이 없어졌어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/arindamdawn/30-days-of-python-day-10-oop-missing-pieces-29fl텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)