programing

파이썬에서 클래스를 확장하는 방법은 무엇입니까?

javamemo 2023. 8. 13. 09:03
반응형

파이썬에서 클래스를 확장하는 방법은 무엇입니까?

파이썬에서 클래스를 확장하려면 어떻게 해야 합니까?예를 들어, 제가 가지고 있다면요.

color.py

class Color:
    def __init__(self, color):
        self.color = color
    def getcolor(self):
        return self.color

color_color.py

import Color

class Color:
    def getcolor(self):
        return self.color + " extended!"

하지만 이것은 효과가 없습니다...제가 일을 하게 된다면,color_extended.py그리고 나서 내가 색 물체를 만들고 사용할 때.getcolor함수는 마지막에 "확장!" 문자열을 가진 객체를 반환합니다.또한 그것은 수입에서 그것을 얻었어야 했습니다.

python 3.1 가정

사용:

import color

class Color(color.Color):
    ...

만약 이것이 Python 2.x라면, 당신은 또한 파생하고 싶을 것입니다.color.Color부터object새로운 스타일의 클래스로 만들기 위해:

class Color(object):
    ...

Python 3.x에서는 이 작업이 필요하지 않습니다.

class MyParent:

    def sayHi():
        print('Mamma says hi')
from path.to.MyParent import MyParent

class ChildClass(MyParent):
    pass

의 예ChildClass그러면 상속됩니다.sayHi()방법.

클래스를 확장하는 또 다른 방법은 (특히, 새로운 메소드를 추가하고 기존 메소드를 변경하지 않는 것을 의미) 심지어 내장된 메소드까지 Python 자체의 범위 밖으로 확장하는 기능을 추가하는 프리프로세서를 사용하여 Python이 실제로 보기 전에 확장을 일반 Python 구문으로 변환하는 것입니다.

파이썬 2의 기능을 확장하기 위해 이 작업을 수행했습니다.str()예를 들어, 수업.str()다음과 같은 인용된 데이터에 대한 암묵적인 연결 때문에 특히 흥미로운 대상입니다.'this'그리고.'that'.

여기 몇 가지 확장 코드가 있는데, 파이썬이 아닌 구문만 추가됩니다.extend:testDottedQuad비트:

extend:testDottedQuad
def testDottedQuad(strObject):
    if not isinstance(strObject, basestring): return False
    listStrings = strObject.split('.')
    if len(listStrings) != 4: return False
    for strNum in listStrings:
        try:    val = int(strNum)
        except: return False
        if val < 0: return False
        if val > 255: return False
    return True

그 후에 프리프로세서에 공급된 코드에 다음과 같이 쓸 수 있습니다.

if '192.168.1.100'.testDottedQuad():
    doSomething()

dq = '216.126.621.5'
if not dq.testDottedQuad():
    throwWarning();

dqt = ''.join(['127','.','0','.','0','.','1']).testDottedQuad()
if dqt:
    print 'well, that was fun'

프리프로세서는 그것을 먹고, 원숭이 패치 없이 일반 파이썬을 뱉어내고, 파이썬은 제가 의도한 대로 합니다.

c 전처리기가 c에 기능을 추가하는 것처럼, 파이썬 전처리기도 파이썬에 기능을 추가할 수 있습니다.

저의 프리프로세서 구현은 스택 오버플로 답변에 비해 너무 크지만 관심이 있는 사람들에게는 GitHub에 있습니다.

이렇게 씁니다.

class menssagem:
  propriedade1 = "Certo!"
  propriedade2 = "Erro!"

def metodo1(self)
  print(self.propriedade1)

연장하기 위해

import menssagem
class menssagem2(menssagem):

  menssagem1 = None #não nescessario not necessary

  def __init__(self,menssagem):
    self.menssagem1 = menssagem

  #call first class method
  #usando o metodo da menssagem 1

  def Menssagem(self):
    self.menssagem1.metodo1()

언급URL : https://stackoverflow.com/questions/15526858/how-to-extend-a-class-in-python

반응형