파이썬으로 가상 함수 만들기
7417 단어 python2.7
파이썬으로 가상 함수 만들기
절차 개요
1 수업 만들기
2 abc 사용
3 abstract method 표시
수업 만들기
우선, 이른바 상속 관계의 클래스를 작성합니다.
MyClassAbstract를 상속받은 MyClass 만들기
sample_method가 있는 클래스
abstract.py#coding: UTF-8
class MyClassAbstract(object):
'''
classdocs
'''
def __init__(self):
'''
Constructor
'''
pass
def sample_method(self):
pass
MyClassAbstract를 상속하는 클래스 만들기
이 시점에서 가상 함수를 만들지 않았기 때문에,
sample_method를 구현하지 않아도 오류가 발생하지 않습니다.
hontai.pyfrom abstract import MyClassAbstract
class MyClass(MyClassAbstract):
def hontai_method(self):
print("Hontai")
pass
main 함수에서 MyClass의 sample_method()를 호출해 보자.
main.pyfrom hontai import MyClass
if __name__ == '__main__':
MyClass().sample_method()
실행 결과abstract
MyClassAbstract의 sample_method를 가상 함수로 만듭니다.
MyClassAbstract의 sample_method를 가상 함수로 만듭니다.
변경 개소는 3 개소
- abc에서 ABCMeta 및 abstract method 가져 오기
- metaclass에 ABCMeta 설정
- 추상화하고 싶은 클래스의 직전에 [ @abstractmethod ]를 부여
abstract.py#coding: UTF-8
from abc import ABCMeta, abstractmethod # 変更
class MyClassAbstract(object):
'''
classdocs
'''
__metaclass__ = ABCMeta # 変更
def __init__(self):
'''
Constructor
'''
pass
# 抽象メソッド
@abstractmethod # 変更
def sample_method(self):
print("abstract")
이대로 main 함수를 재실행해 본다.
실행 결과Traceback (most recent call last):
File "/Users/shibatanorihiro/Documents/workspace/testprj/src/main.py", line 4, in <module>
MyClass().sample_method()
TypeError: Can't instantiate abstract class MyClass with abstract methods sample_method
상속 대상이 가상 함수를 구현하지 않으면 오류가 출력됩니다.
동작 검증
MyClass 측에 sample_method를 구현합니다.
bontai.pyfrom abstract import MyClassAbstract
class MyClass(MyClassAbstract):
def hontai_method(self):
self.sample_method()
print("Hontai")
pass
def sample_method(self): #追加
super(MyClass, self).sample_method() #追加
print("Hontai sample") #追加
pass
main.pyfrom hontai import MyClass
if __name__ == '__main__':
MyClass().hontai_method() #hontai_methodを呼ぶようにする
실행 결과abstract
Hontai sample
Hontai
예상대로,
main
-> MyClass.hontai_method
->MyClass.sample_method
->MyClassAbstract.sample_method
라는 움직임이 되었습니다.
Reference
이 문제에 관하여(파이썬으로 가상 함수 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/_Nanagin/items/22426cad27ef438d0816
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#coding: UTF-8
class MyClassAbstract(object):
'''
classdocs
'''
def __init__(self):
'''
Constructor
'''
pass
def sample_method(self):
pass
from abstract import MyClassAbstract
class MyClass(MyClassAbstract):
def hontai_method(self):
print("Hontai")
pass
from hontai import MyClass
if __name__ == '__main__':
MyClass().sample_method()
abstract
#coding: UTF-8
from abc import ABCMeta, abstractmethod # 変更
class MyClassAbstract(object):
'''
classdocs
'''
__metaclass__ = ABCMeta # 変更
def __init__(self):
'''
Constructor
'''
pass
# 抽象メソッド
@abstractmethod # 変更
def sample_method(self):
print("abstract")
Traceback (most recent call last):
File "/Users/shibatanorihiro/Documents/workspace/testprj/src/main.py", line 4, in <module>
MyClass().sample_method()
TypeError: Can't instantiate abstract class MyClass with abstract methods sample_method
from abstract import MyClassAbstract
class MyClass(MyClassAbstract):
def hontai_method(self):
self.sample_method()
print("Hontai")
pass
def sample_method(self): #追加
super(MyClass, self).sample_method() #追加
print("Hontai sample") #追加
pass
from hontai import MyClass
if __name__ == '__main__':
MyClass().hontai_method() #hontai_methodを呼ぶようにする
abstract
Hontai sample
Hontai
Reference
이 문제에 관하여(파이썬으로 가상 함수 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/_Nanagin/items/22426cad27ef438d0816텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)