| 899 | self.assertEqual(int(Frag()), 42) |
| 900 | |
| 901 | def test_diamond_inheritance(self): |
| 902 | # Testing multiple inheritance special cases... |
| 903 | class A(object): |
| 904 | def spam(self): return "A" |
| 905 | self.assertEqual(A().spam(), "A") |
| 906 | class B(A): |
| 907 | def boo(self): return "B" |
| 908 | def spam(self): return "B" |
| 909 | self.assertEqual(B().spam(), "B") |
| 910 | self.assertEqual(B().boo(), "B") |
| 911 | class C(A): |
| 912 | def boo(self): return "C" |
| 913 | self.assertEqual(C().spam(), "A") |
| 914 | self.assertEqual(C().boo(), "C") |
| 915 | class D(B, C): pass |
| 916 | self.assertEqual(D().spam(), "B") |
| 917 | self.assertEqual(D().boo(), "B") |
| 918 | self.assertEqual(D.__mro__, (D, B, C, A, object)) |
| 919 | class E(C, B): pass |
| 920 | self.assertEqual(E().spam(), "B") |
| 921 | self.assertEqual(E().boo(), "C") |
| 922 | self.assertEqual(E.__mro__, (E, C, B, A, object)) |
| 923 | # MRO order disagreement |
| 924 | try: |
| 925 | class F(D, E): pass |
| 926 | except TypeError: |
| 927 | pass |
| 928 | else: |
| 929 | self.fail("expected MRO order disagreement (F)") |
| 930 | try: |
| 931 | class G(E, D): pass |
| 932 | except TypeError: |
| 933 | pass |
| 934 | else: |
| 935 | self.fail("expected MRO order disagreement (G)") |
| 936 | |
| 937 | # see thread python-dev/2002-October/029035.html |
| 938 | def test_ex5_from_c3_switch(self): |