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

14
PECS คืออะไร (ผู้ผลิตขยาย Consumer Super)?
ตั้งอยู่ในส่วนที่ไม่ถูกต้องของStack Overflow ที่อยู่ : Использование wildcard ใน Generics Java ฉันเจอ PECS (ย่อมาจากผู้ผลิตextendsและผู้บริโภคsuper ) ในขณะที่อ่านข้อมูลเกี่ยวกับยาชื่อสามัญ มีใครอธิบายให้ฉันรู้วิธีใช้ PECS เพื่อแก้ไขความสับสนระหว่างextendsและsuper?

9
'super' ใน Python คืออะไร
ความแตกต่างระหว่าง: class Child(SomeBaseClass): def __init__(self): super(Child, self).__init__() และ: class Child(SomeBaseClass): def __init__(self): SomeBaseClass.__init__(self) ฉันเห็นว่าsuperมีการใช้งานค่อนข้างมากในชั้นเรียนที่มีการสืบทอดเพียงครั้งเดียวเท่านั้น ฉันเห็นได้ว่าทำไมคุณถึงใช้มันในหลาย ๆ มรดก แต่ไม่ชัดเจนว่าข้อดีของการใช้มันในสถานการณ์แบบนี้คืออะไร
564 python  oop  inheritance  super 

7
super () เพิ่ม“ TypeError: ต้องเป็นประเภทไม่ใช่ classobj” สำหรับคลาสสไตล์ใหม่
การใช้งานsuper()TypeError ต่อไปนี้เป็นสาเหตุ: >>> from HTMLParser import HTMLParser >>> class TextParser(HTMLParser): ... def __init__(self): ... super(TextParser, self).__init__() ... self.all_data = [] ... >>> TextParser() (...) TypeError: must be type, not classobj มีคำถามที่คล้ายกันใน StackOverflow: Python super () เพิ่ม TypeErrorซึ่งข้อผิดพลาดถูกอธิบายโดยข้อเท็จจริงที่ว่าผู้ใช้คลาสนั้นไม่ใช่คลาสสไตล์ใหม่ อย่างไรก็ตามคลาสดังกล่าวเป็นคลาสสไตล์ใหม่เนื่องจากสืบทอดมาจากobject: >>> isinstance(HTMLParser(), object) True ฉันพลาดอะไรไป ฉันจะใช้super()ที่นี่ได้อย่างไร ใช้HTMLParser.__init__(self)แทนsuper(TextParser, self).__init__()จะได้ผล แต่ฉันอยากจะเข้าใจ TypeError PS: objectโจอาคิมชี้ให้เห็นว่าการเป็นตัวอย่างใหม่สไตล์ชั้นจะไม่เทียบเท่ากับการเป็น …

15
super () ใน Java
จะถูกsuper()นำมาใช้เพื่อเรียก constructor แม่? super()กรุณาอธิบาย
222 java  super 

4
super () ล้มเหลวด้วยข้อผิดพลาด: TypeError“ อาร์กิวเมนต์ 1 ต้องเป็นประเภทไม่ใช่ classobj” เมื่อผู้ปกครองไม่สืบทอดจากวัตถุ
ฉันพบข้อผิดพลาดบางอย่างที่ไม่สามารถหาได้ เบาะแสอะไรที่ผิดปกติกับรหัสตัวอย่างของฉัน? class B: def meth(self, arg): print arg class C(B): def meth(self, arg): super(C, self).meth(arg) print C().meth(1) ฉันได้รับรหัสทดสอบตัวอย่างจากความช่วยเหลือของวิธีการในตัว 'super' นี่คือข้อผิดพลาด: Traceback (most recent call last): File "./test.py", line 10, in ? print C().meth(1) File "./test.py", line 8, in meth super(C, self).meth(arg) TypeError: super() argument 1 must be type, not …

6
การเรียกคลาสผู้ปกครอง __init__ ที่มีหลายมรดกวิธีที่ถูกต้องคืออะไร?
ว่าฉันมีสถานการณ์สืบทอดหลาย: class A(object): # code for A here class B(object): # code for B here class C(A, B): def __init__(self): # What's the right code to write here to ensure # A.__init__ and B.__init__ get called? มีสองวิธีทั่วไปเพื่อเขียนเป็นC's __init__: (แบบเก่า) ParentClass.__init__(self) (ใหม่สไตล์) super(DerivedClass, self).__init__() อย่างไรก็ตามในกรณีใดกรณีหนึ่งถ้าคลาสแม่ ( AและB) ไม่ปฏิบัติตามแบบแผนเดียวกันรหัสจะทำงานไม่ถูกต้อง (บางคนอาจพลาดหรือถูกเรียกหลายครั้ง) ดังนั้นวิธีที่ถูกต้องอีกครั้งคืออะไร? มันง่ายที่จะพูดว่า …

1
ทำไม Python 3.x's super () เวทมนต์?
ใน Python 3.x super()สามารถเรียกใช้โดยไม่มีอาร์กิวเมนต์: class A(object): def x(self): print("Hey now") class B(A): def x(self): super().x() >>> B().x() Hey now เพื่อที่จะทำให้งานนี้บางมายากลรวบรวมเวลาที่จะดำเนินการอย่างใดอย่างหนึ่งเป็นผลมาจากที่ซึ่งเป็นรหัสต่อไปนี้ (ซึ่ง rebinds superไปsuper_) ล้มเหลว: super_ = super class A(object): def x(self): print("No flipping") class B(A): def x(self): super_().x() >>> B().x() Traceback (most recent call last): File "<stdin>", line 1, in …
159 python  python-3.x  super 

4
Python super () เพิ่ม TypeError
ใน Python 2.5 โค้ดต่อไปนี้ทำให้เกิดTypeError: >>> class X: def a(self): print "a" >>> class Y(X): def a(self): super(Y,self).a() print "b" >>> c = Y() >>> c.a() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in a TypeError: super() argument 1 must be type, not …

13
Java: การเรียกใช้ super method ซึ่งเรียกว่า overridden method
public class SuperClass { public void method1() { System.out.println("superclass method1"); this.method2(); } public void method2() { System.out.println("superclass method2"); } } public class SubClass extends SuperClass { @Override public void method1() { System.out.println("subclass method1"); super.method1(); } @Override public void method2() { System.out.println("subclass method2"); } } public class Demo { public static …

4
super.onCreate (saveInstanceState);
ผมได้สร้างโครงการและการประยุกต์ใช้ Android ใน MainActivity.java> มันเป็นโทรonCreate()super.onCreate(savedInstanceState) ในฐานะผู้เริ่มต้นใครสามารถอธิบายได้ว่าจุดประสงค์ของบรรทัดข้างต้นคืออะไร?

8
วิธีบังคับให้คลาสที่ได้รับเรียก super method? (เช่นเดียวกับ Android)
ฉันสงสัยว่าเมื่อสร้างActivityคลาสใหม่แล้วแทนที่onCreate()เมธอดในคราสฉันมักจะได้รับการเพิ่มอัตโนมัติ: super.onCreate(). สิ่งนี้เกิดขึ้นได้อย่างไร? มีคีย์เวิร์ด java ใน abstract หรือ parent class ที่บังคับสิ่งนี้หรือไม่? ฉันไม่รู้ว่ามันผิดกฎหมายหรือไม่ที่จะไม่เรียกซุปเปอร์คลาส แต่ฉันจำได้ว่าในบางวิธีฉันได้รับข้อยกเว้นที่ไม่ทำ สิ่งนี้มีอยู่ใน java ด้วยหรือไม่? คุณสามารถใช้คำหลักเพื่อทำสิ่งนั้นได้หรือไม่ หรือทำอย่างไร?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.