30일간의 파이썬👨‍💻 - 10일째. - OOP이 없어졌어요.

16499 단어 pythonchallenge
어제 나는 거의 모든 관건적인 대상 프로그래밍 개념을 탐구했다.오늘 저는 나머지 대상 프로그래밍 개념과Python에서의 실현을 소개했습니다.그 밖에 저는 실용적인 코드 연습을 포함하려고 합니다. 이런 연습은Python에서 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에서 함수식 프로그래밍 개념을 어떻게 실현하는지 연구할 것이다.
    즐거운 시간 되세요!

    좋은 웹페이지 즐겨찾기