คำถามติดแท็ก getattr


14
getattr () คืออะไรและฉันจะใช้อย่างไร
ผมเพิ่งอ่านเกี่ยวกับgetattr()ฟังก์ชั่น ปัญหาคือฉันยังไม่เข้าใจความคิดของการใช้งาน สิ่งเดียวที่ฉันเข้าใจเกี่ยวกับgetattr()ว่าเป็นเช่นเดียวกับการเรียกgetattr(li, "pop")li.pop ฉันไม่เข้าใจเมื่อหนังสือกล่าวถึงวิธีที่คุณใช้เพื่อรับการอ้างอิงไปยังฟังก์ชั่นโดยไม่ทราบชื่อจนกระทั่งถึงเวลาใช้งาน บางทีนี่อาจเป็นฉันในการเขียนโปรแกรมโดยทั่วไป มีใครบ้างไหมที่ให้ความสว่างกับตัวแบบ? ฉันควรใช้สิ่งนี้เมื่อใดและอย่างไร
295 python  getattr 

4
ทำความเข้าใจความแตกต่างระหว่าง __getattr__ และ __getattribute__
ฉันพยายามที่จะเข้าใจความแตกต่างระหว่าง__getattr__และ__getattribute__อย่างไรก็ตามฉันล้มเหลว คำตอบของคำถามกองมากเกินความแตกต่างระหว่าง__getattr__VS__getattribute__พูดว่า: __getattribute__ถูกเรียกใช้ก่อนที่จะดูแอตทริบิวต์ที่แท้จริงของวัตถุและอาจมีความยุ่งยากในการใช้อย่างถูกต้อง คุณสามารถจบด้วยการเรียกซ้ำแบบไม่สิ้นสุดได้อย่างง่ายดายมาก ฉันไม่รู้ว่ามันแปลว่าอะไร จากนั้นจะกล่าวต่อไปว่า: __getattr__คุณเกือบจะแน่นอนต้องการ ทำไม? ฉันอ่านว่าถ้า__getattribute__ล้มเหลว__getattr__ถูกเรียก เหตุใดจึงมีสองวิธีที่แตกต่างกันในการทำสิ่งเดียวกัน หากรหัสของฉันใช้คลาสสไตล์ใหม่ฉันควรใช้อะไร ฉันกำลังมองหาตัวอย่างโค้ดเพื่อล้างคำถามนี้ ฉันใช้ Google อย่างดีที่สุดเพื่อความสามารถของฉัน แต่คำตอบที่ฉันพบไม่ได้พูดถึงปัญหาอย่างถี่ถ้วน หากมีเอกสารใด ๆ ฉันพร้อมที่จะอ่าน

3
ฉันจะแทนที่ __getattr__ ใน Python โดยไม่ทำลายพฤติกรรมเริ่มต้นได้อย่างไร
ฉันต้องการแทนที่__getattr__วิธีการในชั้นเรียนเพื่อทำสิ่งที่แฟนซี แต่ฉันไม่ต้องการที่จะทำลายพฤติกรรมเริ่มต้น วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?

4
ฉันจะเรียก setattr () บนโมดูลปัจจุบันได้อย่างไร
ฉันจะส่งผ่านสิ่งใดเป็นพารามิเตอร์แรกobjectไปยังฟังก์ชัน "" setattr(object, name, value)เพื่อตั้งค่าตัวแปรในโมดูลปัจจุบัน " ตัวอย่างเช่น: setattr(object, "SOME_CONSTANT", 42); ให้ผลเช่นเดียวกับ: SOME_CONSTANT = 42 ภายในโมดูลที่มีบรรทัดเหล่านี้ (ถูกต้องobject) ฉันสร้างค่าหลายอย่างในระดับโมดูลแบบไดนามิกและเนื่องจากฉันไม่สามารถกำหนดได้__getattr__ที่ระดับโมดูลนี่คือทางเลือกของฉัน

8
__getattr__ บนโมดูล
จะใช้การเทียบเท่า__getattr__กับคลาสบนโมดูลได้อย่างไร? ตัวอย่าง เมื่อเรียกใช้ฟังก์ชันที่ไม่มีอยู่ในแอตทริบิวต์ที่กำหนดแบบคงที่ของโมดูลฉันต้องการสร้างอินสแตนซ์ของคลาสในโมดูลนั้นและเรียกใช้เมธอดบนฟังก์ชันด้วยชื่อเดียวกับที่ล้มเหลวในการค้นหาแอ็ตทริบิวต์บนโมดูล class A(object): def salutation(self, accusative): print "hello", accusative # note this function is intentionally on the module, and not the class above def __getattr__(mod, name): return getattr(A(), name) if __name__ == "__main__": # i hope here to have my __getattr__ function above invoked, since # salutation does …

6
ฉันจะติดตั้ง __getattribute__ โดยไม่มีข้อผิดพลาดซ้ำไม่สิ้นสุดได้อย่างไร
ฉันต้องการลบล้างการเข้าถึงตัวแปรหนึ่งในคลาส แต่คืนค่าอื่น ๆ ทั้งหมดตามปกติ ฉันจะทำสิ่งนี้ให้สำเร็จได้__getattribute__อย่างไร? ฉันลองทำสิ่งต่อไปนี้ (ซึ่งควรแสดงให้เห็นถึงสิ่งที่ฉันพยายามทำ) แต่ฉันได้รับข้อผิดพลาดในการเรียกซ้ำ class D(object): def __init__(self): self.test=20 self.test2=21 def __getattribute__(self,name): if name=='test': return 0. else: return self.__dict__[name] >>> print D().test 0.0 >>> print D().test2 ... RuntimeError: maximum recursion depth exceeded in cmp
104 python  class  oop  recursion  getattr 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.