파이썬에서 클래스를 확장하는 방법은 무엇입니까?
파이썬에서 클래스를 확장하려면 어떻게 해야 합니까?예를 들어, 제가 가지고 있다면요.
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
'programing' 카테고리의 다른 글
'a:before'와 'a:after'에 대해 ':hover' 조건을 어떻게 쓸 수 있습니까? (0) | 2023.08.13 |
---|---|
문자열 끝에서 마지막 쉼표(및 마지막 쉼표 뒤에 공백이 있을 수 있음) 제거 (0) | 2023.08.13 |
도커 컨테이너 내부에서 프로세스가 실행되고 있는지 확인하는 방법은 무엇입니까? (0) | 2023.08.13 |
window.location.href를 사용하여 게시 데이터 전달 (0) | 2023.08.13 |
RecyclerView 및 java.lang.Index Out Of Bounds 예외:불일치가 탐지되었습니다.잘못된 뷰 홀더 어댑터 위치View삼성 장치의 홀더 (0) | 2023.08.13 |