Главная / Программирование /
Язык программирования Python / Тест 4
Язык программирования Python - тест 4
Упражнение 1:
Номер 1
Что представляет собой объектно-ориентированная программа с точки зрения теории ООП?
Ответ:
 (1) набор инструкций для построения объектов 
 (2) набор объектов, которые посылают друг другу сообщения 
 (3) декларации типов объектов 
 (4) декларации классов объектов 
Номер 2
Выберите правильные (с точки зрения теории ООП) утверждения:
Ответ:
 (1) все объекты одного типа могут принимать одни и те же сообщения 
 (2) все объекты одного типа принадлежат одному классу 
 (3) каждый объект имеет тип 
Номер 3
Разбиение программы на объекты называется:
Ответ:
 (1) абстракцией 
 (2) декомпозицией 
 (3) инкапсуляцией 
 (4) полиморфизмом 
Номер 4
Сокрытие информации о внутреннем устройстве объекта, при котором вся работа с объектом ведется только через общедоступный интерфейс называется
Ответ:
 (1) абстракцией 
 (2) декомпозицией 
 (3) инкапсуляцией 
 (4) агрегацией 
Номер 5
Что из нижеперечисленного является объектом в Python?
Ответ:
 (1) функция 
 (2) метод 
 (3) класс 
 (4) оператор 
Упражнение 2:
Номер 1
Какие из перечисленных действий можно выполнить над любым объектом obj
в языке Python 2.4?
Ответ:
 (1) print id(obj)
 
 (2) print obj
 
 (3) hash(obj)
 
 (4) not obj
 
Номер 2
Какие из перечисленных действий можно выполнить над любым объектом obj
в языке Python 2.4?
Ответ:
 (1) print repr(obj)
 
 (2) del obj
 
 (3) isinstance(w, obj)
 
 (4) len(obj)
 
Номер 3
Как узнать, ссылаются ли два имени (a
и b
) на один и тот же объект?
Ответ:
 (1) id(a) == id(b)
 
 (2) a == b
 
 (3) a is b
 
 (4) hash(a) == hash(b)
 
Номер 4
Объекты a
и b
принадлежат одному классу C
. Какие из следующих выражений будут, скорее всего, иметь значение "истина" сразу после создания?
Ответ:
 (1) isinstance(a, type(b))
 
 (2) issubclass(C, C)
 
 (3) dir(a) is dir(b)
 
 (4) dir(a) == dir(b)
 
Номер 5
Сколько общедоступных методов будет иметь экземпляр класса ABC
и что возвратит вызов метода a()
?
class A(object):
def a(self): return 'a'
class B(object):
def b(self): return 'b'
class C(object):
def c(self): return 'c'
class AB(A, B):
def a(self): return 'ab'
class BC(B, C):
def a(self): return 'bc'
class ABC(AB, B, C):
def a(self): return 'abc'
Ответ:
 (1) 3, возвратит a
 
 (2) 3, возвратит ab
 
 (3) 3, возвратит abc
 
 (4) 5, возвратит a
 
Упражнение 3:
Номер 1
Имеется определение класса:
class CL(object):
def set_color(self, value): self.__color = value
def del_color(self): del self.__color
color = property(lambda self: self.__color,
set_color, del_color, "Color property.")
c = CL()
Какие из следующих примеров содержат ошибки?
Ответ:
 (1) c.color = "#ff00ff"; c.color = "#0000ff"
 
 (2) del c.color
 
 (3) print c.color
 
 (4) has_color = hasattr(c, 'color')
 
Номер 2
Имеется определение класса:
class CL(object):
def __init__(self, color):
self.color = color
def __str__(self):
return self.color
c = CL("#ff00ff")
Какие из следующих примеров не содержат ошибки?
Ответ:
 (1) c.color = "#ff00ff"; c.color = "#0000ff"
 
 (2) del c.color
 
 (3) print c.color
 
 (4) print c
 
Номер 3
Имеются следующие определения:
def m1(self):
print "m1"
class M:
def m2(self):
print "m2"
m = M()
Какой из фрагментов кода содержит ошибки?
Ответ:
 (1) m.m1 = m1; m.m1()
 
 (2) M.m1 = m1; m.m1()
 
 (3) m.m1 = m1; m.m1(m)
 
 (4) m.m1 = m.m2; m.m1()
 
Номер 4
Имеются следующие определения:
class A:
def am(self):
print "am"
class B:
def bm(self):
print "bm"
a = A()
b = B()
Какой из фрагментов кода содержит ошибки?
Ответ:
 (1) a.am = b.bm; a.bm()
 
 (2) a.am = b.bm; a.am()
 
 (3) A.am = b.bm; a.am()
 
 (4) A.am = B.bm; a.am()
 
Номер 5
Имеются следующие определения:
def aa(x):
class X:
def m(self):
return x
return X
a = aa(1)()
Какие из фрагментов кода содержат ошибки?
Ответ:
 (1) print a.m()
 
 (2) b = aa()()
 
 (3) print a()
 
Упражнение 4:
Номер 1
Укажите набор атрибутов, которые считаются общедоступными, для экземпляров следующего класса:
class Example:
def __init__(self, x, y):
xy = x, y
self.position = xy
self._length = self.__len(x, y)
def __len(self, x, y):
return abs(x) + abs(y)
def getlen(self):
return self._length
Ответ:
 (1) getlen, _length, position, __len, xy
 
 (2) getlen, position
 
 (3) getlen, _length, position
 
 (4) position
 
Номер 2
Укажите набор атрибутов, которые считаются приватными, для экземпляров следующего класса:
class Ex:
def __init__(self, x, y):
xy = x, y
self.position = xy
self._length = self.__len(x, y)
def __len(self, x, y):
return abs(x) + abs(y)
def getlen(self):
return self._length
Ответ:
 (1) _length, __len
 
 (2) _length, __len, position
 
 (3) __len, xy, x, y, self
 
 (4) xy, x, y, self, _length, position
 
Номер 3
Имеется определение класса:
class Ex:
def __init__(self, x, y):
xy = x, y
self.position = xy
self._length = self.__len(x, y)
def __len(self, x, y):
return abs(x) + abs(y)
def getlen(self):
return self._length
p = Ex(1, 2)
Какой из вариантов его применения не допустим в программах на Python, которые пользуются экземплярами класса Ex
?
Ответ:
 (1) print p.position
 
 (2) print p.getlen()
 
 (3) print p.__len(1,2)
 
Номер 4
Имеется определение класса:
class Line:
def __init__(self, (x, y), (x1, y1)):
self._b = (x, y)
self._e = (x1, y1)
def length(self):
import math
return math.sqrt((self._b[0]-self._e[0])**2 + (self._b[1]-self._e[1])**2)
def begin(self):
return self._b
def end(self):
return self._e
l = Line((1, 2), (-1, 4))
Какие из вариантов его применения не допустимы в программах на Python, которые пользуются экземплярами класса Line
?
Ответ:
 (1) print l.length()
 
 (2) print l._b, "-", l._e
 
 (3) print l.x, l.x1
 
 (4) print l.begin(), l.end()
 
Номер 5
Имеется определение класса:
class Line:
def __init__(self, (x, y), (x1, y1)):
self._b = (x, y)
self._e = (x1, y1)
def length(self):
import math
return math.sqrt((self._b[0]-self._e[0])**2 + (self._b[1]-self._e[1])**2)
class Triangle:
def __init__(self, p1, p2, p3):
self._a, self._b, self._c = p1, p2, p3
def p(self):
return Line(self._a, self._b).length() + Line(self._a, self._c).length()
+ Line(self._b, self._c).length()
def as_lines(self):
return Line(self._a, self._b), Line(self._a, self._c), Line(self._b,
self._c)
tr = Triangle((1, 2), (-1, 4), (0, 0))
Какие из вариантов его применения допустимы в программах на Python, которые пользуются экземплярами класса Triangle
?
Ответ:
 (1) print Line(tr._a + tr._b).length()
 
 (2) print tr.as_lines()[0].length()
 
 (3) print tr.p()
 
 (4) print _a, _c
 
Упражнение 5:
Номер 1
Как называется отношение, которое имеют следующие два класса:
class A(object):
def __init__(self, x):
self._mydata = B(x)
class B(object):
def __init__(self, x):
self._mydata = x
Ответ:
 (1) наследование. A
получается наследованием B
 
 (2) ассоциация. Экземпляр A
содержит ссылки на экземпляры B
 
 (3) метакласс. B
является метаклассом для A
 
 (4) метакласс. A
является метаклассом для B
 
Номер 2
Как называется отношение, которое имеют следующие два класса:
class A(object):
def __init__(self, x):
self._mydata = x
def m1(self):
raise NotImplementedError
class B(A):
def __init__(self, x):
super(B, self).__init__(x)
def m1(self):
return self._mydata
Ответ:
 (1) наследование. A
получается наследованием B
 
 (2) наследование. B
получается наследованием A
 
 (3) агрегация. Экземпляры A
содержат экземпляры класса B
 
 (4) ассоциация. Экземпляры A
содержат ссылки на экземпляры класса B
 
Номер 3
Как называется отношение, которое имеют между собой следующие два класса:
class A(type):
def __init__(cls, name, bases, dict):
return super(A, cls).__init__(cls, name, bases, dict)
B = A("B", (), {})
Ответ:
 (1) ассоциация. A
содержит ссылки на B
 
 (2) наследование. B
получается наследованием A
 
 (3) метакласс. A
является метаклассом для B
 
 (4) метакласс. B
является метаклассом для A
 
Номер 4
Как называется отношение, которое имеют между собой следующие два класса:
class A(object):
def __init__(self, **atts):
self._atts = atts
def __repr__(self):
return ":" + str(self._atts)
class B(list):
def __init__(self, *params):
super(B, self).__init__(params)
Ответ:
 (1) ассоциация. Экземпляры A
содержат ссылки на экземпляры B
 
 (2) ассоциация. Экземпляры B
содержат ссылки на экземпляры A
 
 (3) агрегация. Экземпляры B
содержат экземпляры A
 
 (4) классы не связаны между собой 
Номер 5
Объект какого из перечисленных типов можно передавать в качестве параметра функции f()
?
def f(x):
l = len(x)
return x[l-1]
Ответ:
 (1) int
 
 (2) str
 
 (3) tuple
 
 (4) bool
 
Упражнение 6:
Номер 1
Какую роль играет xx
в следующей Python-программе:
def xx(func):
class X(object):
pass
setattr(X, func.__name__, func)
return X
Ответ:
 (1) функция-фабрика 
 (2) функция-фабрика классов 
 (3) метакласс 
 (4) метод класса 
Номер 2
Какую роль играет xx
в Python-программе:
class M(object):
def xx(self):
print "self:", self
Ответ:
 (1) функция-фабрика 
 (2) статистический метод 
 (3) метод экземпляра класса 
 (4) метафункция 
Номер 3
Какую роль играет xx
в Python-программе, и чему должен быть равен XXX
:
class A(object):
def xx():
return A.__name__
xx = XXX(xx)
Ответ:
 (1) метод, XXX
равен instancemethod
 
 (2) статический метод, XXX
равен staticmethod
 
 (3) метод класса, XXX
равен classmethod
 
 (4) функция, XXX
можно опустить 
Номер 4
Какую роль играет xx
в Python-программе, и чему должен быть равен XXX
:
class A(object):
def xx(cls, x):
...
xx = XXX(xx)
Ответ:
 (1) метод, XXX
равен instancemethod
 
 (2) статический метод, XXX
равен staticmethod
 
 (3) метод класса, XXX
равен classmethod
 
 (4) функция, XXX
можно опустить 
Номер 5
Какую роль играет xx
в Python-программе:
class A:
...
class B:
...
...
a = A()
b = B()
c = xx(a, b)
b1 = B()
c1 = xx(b1, b)
Ответ:
 (1) метод 
 (2) мультиметод 
 (3) функция 
 (4) класс 
Упражнение 7:
Номер 1
Класс имеет метод __call__()
. Какому классу он может "подражать" и как пользоваться этим методом?
class A:
#...
def __call__(self, *params, **kws):
#...
a = A()
Ответ:
 (1) функция. Пользоваться можно так: b = a(2,3,4)
 
 (2) кодовый объект. Пользоваться можно так: eval(a)
 
 (3) список. Пользоваться можно так: a[0] = 5
 
 (4) кортеж. Пользоваться можно так: a = (1, 2, 3)
 
Номер 2
Класс имеет методы __iter__()
и next()
. О чем это говорит и как пользоваться этим методом?
class A:
#...
def __iter__(self):
#...
def next(self):
#...
a = A(1, 2, 3)
Ответ:
 (1) последовательность. Пользоваться можно так: print a[2]
 
 (2) нет особого названия. Пользоваться можно так: print a.next()
 
 (3) итератор. Пользоваться можно так: for i in a: print i
 
 (4) генератор. Пользоваться можно так: for i in a(): print i
 
Номер 3
Класс имеет методы __rshift__, __rrshift__
и __irshift__
. Как правильно пользоваться этими методами?
class X:
def __rshift__(self, opd):
#...
def __rrshift__(self, opd):
#...
def __irshift__(self, opd):
#...
x = X()
Ответ:
 (1) print >> x, 10
 
 (2) x <<= 1
 
 (3) y = x >> 2
 
 (4) y = 2 >> x
 
Номер 5
Какие методы необходимо иметь x
для задания следующих действий:
>>> x = X(0)
>>> print x + 10
10
>>> print x - 23
-23
>>> print x >> 2
0
Ответ:
 (1) __init__, __add__, __radd__, __sub__, __rsub__, __rshift__, __rrshift__
 
 (2) __init__, __add__, __sub__, __rshift__
 
 (3) __init__, __add__, __sub__, __rshift__, __str__, __repr__
 
 (4) __init__, __add__, __sub__, __rshift__, __str__