เมื่อฉันพยายามที่จะใช้วิธีการคงที่จากภายในร่างกายของชั้นเรียนและกำหนดวิธีการคงที่โดยใช้staticmethod
ฟังก์ชั่นในตัวเป็นมัณฑนากรเช่นนี้:
class Klass(object):
@staticmethod # use as decorator
def _stat_func():
return 42
_ANS = _stat_func() # call the staticmethod
def method(self):
ret = Klass._stat_func() + Klass._ANS
return ret
ฉันได้รับข้อผิดพลาดต่อไปนี้:
Traceback (most recent call last):<br>
File "call_staticmethod.py", line 1, in <module>
class Klass(object):
File "call_staticmethod.py", line 7, in Klass
_ANS = _stat_func()
TypeError: 'staticmethod' object is not callable
ฉันเข้าใจว่าทำไมสิ่งนี้จึงเกิดขึ้น (การเชื่อมโยงตัวบอกคำอธิบาย)และสามารถแก้ไขได้ด้วยการแปลง_stat_func()
เป็นวิธีการคงที่ด้วยตนเองหลังจากการใช้งานครั้งสุดท้ายเช่น:
class Klass(object):
def _stat_func():
return 42
_ANS = _stat_func() # use the non-staticmethod version
_stat_func = staticmethod(_stat_func) # convert function to a static method
def method(self):
ret = Klass._stat_func() + Klass._ANS
return ret
ดังนั้นคำถามของฉันคือ:
มีวิธีที่ดีกว่าในการทำความสะอาดหรือ "Pythonic" มากกว่านี้หรือไม่?
staticmethod
เลย พวกเขามักจะมีประโยชน์มากขึ้นเป็นฟังก์ชั่นระดับโมดูลซึ่งในกรณีที่ปัญหาของคุณไม่เป็นปัญหาclassmethod
ในทางกลับกัน ...