developer tip

Python : 수퍼 클래스에서 서브 클래스를 만들려면 어떻게해야합니까?

copycodes 2020. 10. 11. 10:45
반응형

Python : 수퍼 클래스에서 서브 클래스를 만들려면 어떻게해야합니까?


파이썬에서 슈퍼 클래스에서 서브 클래스를 어떻게 만드나요?


# Initialize using Parent
#
class MySubClass(MySuperClass):
    def __init__(self):
        MySuperClass.__init__(self)

또는 더 좋은 점은 Python의 내장 함수 super()( Python 2 / Python 3 문서 참조)를 사용하는 것이 초기화를 위해 부모를 호출하는 약간 더 나은 방법 일 수 있습니다.

# Better initialize using Parent (less redundant).
#
class MySubClassBetter(MySuperClass):
    def __init__(self):
        super(MySubClassBetter, self).__init__()

또는 super()클래스 정의 내에서만 작동 하는 0 인수 형식을 사용하는 것을 제외하고는 위와 똑같습니다 .

class MySubClassBetter(MySuperClass):
    def __init__(self):
        super().__init__()

영웅적인 작은 예 :

class SuperHero(object): #superclass, inherits from default object
    def getName(self):
        raise NotImplementedError #you want to override this on the child classes

class SuperMan(SuperHero): #subclass, inherits from SuperHero
    def getName(self):
        return "Clark Kent"

class SuperManII(SuperHero): #another subclass
    def getName(self):
       return "Clark Kent, Jr."

if __name__ == "__main__":
    sm = SuperMan()
    print sm.getName()
    sm2 = SuperManII()
    print sm2.getName()

class MySubClass(MySuperClass):
    def __init__(self):
        MySuperClass.__init__(self)

        # <the rest of your custom initialization code goes here>

상속 섹션 파이썬 문서에서 더 자세하게 설명


class Class1(object):
    pass

class Class2(Class1):
    pass

Class2는 Class1의 하위 클래스입니다.


위의 답변에서는 super(키워드) 인수없이 초기화됩니다. 그러나 종종 자신의 '사용자 지정'인수를 전달하는 것뿐만 아니라 그렇게하기를 원합니다. 다음은이 사용 사례를 보여주는 예입니다.

class SortedList(list):
    def __init__(self, *args, reverse=False, **kwargs):
        super().__init__(*args, **kwargs)       # Initialize the super class
        self.reverse = reverse
        self.sort(reverse=self.reverse)         # Do additional things with the custom keyword arguments

이 하위 클래스는 list초기화 될 때 reverse다음 테스트에서 볼 수 있듯이 키워드 인수에 지정된 방향으로 즉시 자체 정렬됩니다 .

import pytest

def test_1():
    assert SortedList([5, 2, 3]) == [2, 3, 5]

def test_2():
    SortedList([5, 2, 3], reverse=True) == [5, 3, 2]

def test_3():
    with pytest.raises(TypeError):
        sorted_list = SortedList([5, 2, 3], True)   # This doesn't work because 'reverse' must be passed as a keyword argument

if __name__ == "__main__":
    pytest.main([__file__])

의에 통과 덕분 *args에이 super목록이 초기화 대신 단지 빈되는 항목으로 채울 수 있습니다. ( PEP 3102reverse 에 따른 키워드 전용 인수입니다 .)


파이썬에서 함수를 사용하여 동적으로 하위 클래스를 만드는 또 다른 방법이 있습니다 type().

SubClass = type('SubClass', (BaseClass,), {'set_x': set_x})  # Methods can be set, including __init__()

You usually want to use this method when working with metaclasses. When you want to do some lower level automations, that alters way how python creates class. Most likely you will not ever need to do it in this way, but when you do, than you already will know what you are doing.


class Subclass (SuperClass):
      # Subclass stuff here

You use:

class DerivedClassName(BaseClassName):

For details, see the Python docs, section 9.5.


class Mammal(object): 
#mammal stuff

class Dog(Mammal): 
#doggie stuff

class BankAccount:

  def __init__(self, balance=0):
    self.balance = int(balance)

  def checkBalance(self): ## Checking opening balance....
    return self.balance

  def deposit(self, deposit_amount=1000): ## takes in cash deposit amount and updates the balance accordingly.
    self.deposit_amount = deposit_amount
    self.balance += deposit_amount
    return self.balance

  def withdraw(self, withdraw_amount=500): ## takes in cash withdrawal amount and updates the balance accordingly
    if self.balance < withdraw_amount: ## if amount is greater than balance return `"invalid transaction"`
        return 'invalid transaction'
    else:
      self.balance -= withdraw_amount
      return self.balance


class MinimumBalanceAccount(BankAccount): #subclass MinimumBalanceAccount of the BankAccount class

    def __init__(self,balance=0, minimum_balance=500):
        BankAccount.__init__(self, balance=0)
        self.minimum_balance = minimum_balance
        self.balance = balance - minimum_balance
        #print "Subclass MinimumBalanceAccount of the BankAccount class created!"

    def MinimumBalance(self):
        return self.minimum_balance

c = BankAccount()
print(c.deposit(50))
print(c.withdraw(10))

b = MinimumBalanceAccount(100, 50)
print(b.deposit(50))
print(b.withdraw(10))
print(b.MinimumBalance())

Subclassing in Python is done as follows:

class WindowElement:
    def print(self):
        pass

class Button(WindowElement):
    def print(self):
        pass

Here is a tutorial about Python that also contains classes and subclasses.

참고URL : https://stackoverflow.com/questions/1607612/python-how-do-i-make-a-subclass-from-a-superclass

반응형