클래스 메서드를 목록에 저장하고 루프를 통해 실행해야합니다. 데코레이터를 정의하고 클래스 메소드를 목록에 추가하는 데 사용합니다. 클래스는 별도의 모듈에 정의되어 있으며 목록에서 main I 루프를 통해 해당 목록에 저장된 클래스 메서드를 호출합니다.목록 개체에 저장된 데코 레이팅 된 클래스 메서드를 실행하는 방법은 무엇입니까?
형식 오류 : example_01 (1 개) 필요한 위치 인수 누락 : 나는 좀 내가 실행하는 클래스 바의 인스턴스를 생성해야합니다 것을 알고있어 '자기'
내가 메인 실행하면, 나는 오류가 발생했습니다 그 방법을 사용하면 목록을 사용할 수 없게됩니다. 그런 구조를 사용하는 올바른 방법은 무엇입니까? 도와주세요 ...
나는 파이썬 3.4
감사
mybar.py
========
examples = list()
def example(fn):
try: name = 'Example %d' % int(fn.__name__[7:])
except: name = fn.__name__
def wrapped():
print('Running: %s\n' % name)
fn()
print('\n')
examples.append(wrapped)
return wrapped
class Bar:
def __init__(self):
self.message = "I'm %s" % (__name__)
@example
def example_01(self):
print(self.message)
print("Executing example_01")
@example
def example_02(selfs):
print(self.message)
print("Executing example_02")
main.py
=======
from bar import mybar
def main():
for example in mybar.examples:
example()
if __name__ == "__main__":
main()
내가 각 클래스 메소드를 위해 장식을 @classmethod 사용하려면 코드를 수정하고 작동
을 사용하고 있습니다,하지만 난하지 않습니다 이유를 이해하십시오. 나는 Bar를 사용하여 example()을 명시 적으로 호출 할 필요가 없다. python doc에 문서화 된 def example_01 (cls)와 같은 클래스 함수의 인수에 클래스 객체를 제공하지 마십시오. 누군가가 설명해 주시겠습니까mybar.py
=======
class Bar:
data = 25
def __init__(self):
self.message = "I'm %s" % (__name__)
Bar.data = 30
@classmethod
@example
def example_01():
print("Executing example_01")
print("Data: ", Bar.data)
@classmethod
@example
def example_02():
print("Executing example_02")
print("Data: ", Bar.data)
출력 :
파이썬에서Running: example_01
Executing example_01
Data: 25
Running: example_02
Executing example_02
Data: 25