2014-02-22 16:54:27 +00:00
|
|
|
class Base:
|
|
|
|
|
2014-04-19 19:54:06 +01:00
|
|
|
def __init__(self):
|
|
|
|
self.a = 1
|
|
|
|
|
2014-02-22 16:54:27 +00:00
|
|
|
def meth(self):
|
2014-04-19 19:54:06 +01:00
|
|
|
print("in Base meth", self.a)
|
2014-02-22 16:54:27 +00:00
|
|
|
|
|
|
|
class Sub(Base):
|
|
|
|
|
|
|
|
def meth(self):
|
|
|
|
print("in Sub meth")
|
|
|
|
return super().meth()
|
|
|
|
|
|
|
|
a = Sub()
|
|
|
|
a.meth()
|
2015-08-21 11:56:14 +01:00
|
|
|
|
|
|
|
# printing super
|
|
|
|
class A:
|
|
|
|
def p(self):
|
|
|
|
print(str(super())[:18])
|
|
|
|
A().p()
|
2017-04-19 00:49:48 +01:00
|
|
|
|
|
|
|
|
|
|
|
# test compiler's handling of long expressions with super
|
|
|
|
class A:
|
|
|
|
bar = 123
|
|
|
|
def foo(self):
|
|
|
|
print('A foo')
|
|
|
|
return [1, 2, 3]
|
|
|
|
class B(A):
|
|
|
|
def foo(self):
|
|
|
|
print('B foo')
|
|
|
|
print(super().bar) # accessing attribute after super()
|
|
|
|
return super().foo().count(2) # calling a subsequent method
|
|
|
|
print(B().foo())
|
2018-04-04 16:03:57 +01:00
|
|
|
|
2018-03-25 22:13:49 +01:00
|
|
|
# first arg to super must be a type
|
|
|
|
try:
|
|
|
|
super(1, 1)
|
|
|
|
except TypeError:
|
|
|
|
print('TypeError')
|
|
|
|
|
2018-04-04 16:03:57 +01:00
|
|
|
# store/delete of super attribute not allowed
|
|
|
|
assert hasattr(super(B, B()), 'foo')
|
|
|
|
try:
|
|
|
|
super(B, B()).foo = 1
|
|
|
|
except AttributeError:
|
|
|
|
print('AttributeError')
|
|
|
|
try:
|
|
|
|
del super(B, B()).foo
|
|
|
|
except AttributeError:
|
|
|
|
print('AttributeError')
|