ฉันกำลังเปลี่ยนคลาสของฉันจากการใช้ getters และ setters อย่างกว้างขวางเป็นการใช้คุณสมบัติ pythonic มากขึ้น
แต่ตอนนี้ฉันติดขัดเพราะ getters หรือ setters ก่อนหน้าของฉันบางคนจะเรียกเมธอดที่สอดคล้องกันของคลาสพื้นฐานแล้วดำเนินการอย่างอื่น แต่จะสำเร็จด้วยสรรพคุณได้อย่างไร? จะเรียกคุณสมบัติ getter หรือ setter ในคลาสพาเรนต์ได้อย่างไร?
แน่นอนว่าการเรียกใช้แอตทริบิวต์นั้นจะทำให้เกิดการเรียกซ้ำไม่สิ้นสุด
class Foo(object):
@property
def bar(self):
return 5
@bar.setter
def bar(self, a):
print a
class FooBar(Foo):
@property
def bar(self):
# return the same value
# as in the base class
return self.bar # --> recursion!
@bar.setter
def bar(self, c):
# perform the same action
# as in the base class
self.bar = c # --> recursion!
# then do something else
print 'something else'
fb = FooBar()
fb.bar = 7
Foo.bar.fset(self, c)
ตัวเซ็ตเตอร์ที่สืบทอดมา ทำไมไม่Foo.bar.fset(c)
- โดยไม่มี "ตัวตน" - ฉันคิดว่าสิ่งนี้จะผ่านไปโดยปริยาย?