|
Technical Interview Questions
C++ Interview Questions
Php Interview Questions
Xml
Interview Questions
C Interview Questions
.........More
Soft Skills
Communication Skills
Leadership Skills
.........More
|
|
Python Interview Questions and Answers
How do I call a method defined in a base class from a
derived class that overrides it?
If you're using new-style classes, use the built-in
super() function:
class Derived(Base):
def meth (self):
super(Derived, self).meth()
If you're using classic classes: For a class definition
such as class Derived(Base): ... you can call method
meth() defined in Base (or one of Base's base classes)
as Base.meth(self, arguments...). Here, Base.meth is an
unbound method, so you need to provide the self
argument.
How can I organize my code to make it easier to change
the base class?
You could define an alias for the base class, assign the
real base class to it before your class definition, and
use the alias throughout your class. Then all you have
to change is the value assigned to the alias.
Incidentally, this trick is also handy if you want to
decide dynamically (e.g. depending on availability of
resources) which base class to use. Example:
BaseAlias = <real base class>
class Derived(BaseAlias):
def meth(self):
BaseAlias.meth(self)
How do I create static class data and static class
methods?
Static data (in the sense of C++ or Java) is easy;
static methods (again in the sense of C++ or Java) are
not supported directly.
For static data, simply define a class attribute. To
assign a new value to the attribute, you have to
explicitly use the class name in the assignment:
class C:
count = 0 # number of times C.__init__ called
def __init__(self):
C.count = C.count + 1
def getcount(self):
return C.count # or return self.count
c.count also refers to C.count for any c such that
isinstance(c, C) holds, unless overridden by c itself or
by some class on the base-class search path from
c.__class__ back to C.
Caution: within a method of C, an assignment like
self.count = 42 creates a new and unrelated instance
vrbl named "count" in self's own dict. Rebinding of a
class-static data name must always specify the class
whether inside a method or not:
C.count = 314
Static methods are possible when you're using new-style
classes:
class C:
def static(arg1, arg2, arg3):
# No 'self' parameter!
...
static = staticmethod(static)
However, a far more straightforward way to get the
effect of a static method is via a simple module-level
function:
def getcount():
return C.count
If your code is structured so as to define one class (or
tightly related class hierarchy) per module, this
supplies the desired encapsulation.
How can I overload constructors (or methods) in Python?
This answer actually applies to all methods, but the
question usually comes up first in the context of
constructors.
In C++ you'd write
class C {
C() { cout << "No arguments\n"; }
C(int i) { cout << "Argument is " << i << "\n"; }
}
in Python you have to write a single constructor that
catches all cases using default arguments. For example:
class C:
def __init__(self, i=None):
if i is None:
print "No arguments"
else:
print "Argument is", i
This is not entirely equivalent, but close enough in
practice.
You could also try a variable-length argument list, e.g.
def __init__(self, *args):
....
The same approach works for all method definitions.
Page Numbers : 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Have a Question ?
post your questions here. It
will be answered as soon as possible.
Check
HTML Interview
Questions for more HTML Interview Questions with Answers
Check
Job Interview Questions
for more Interview Questions with Answers
|