Как стать автором
Обновить

Комментарии 24

Вот про ромбическое наследование интересная ссылка.
На ООП можно несколько доп. вопросов:

11. Возможна ли делегация и композиция в Питоне? -> Почему нет? | Почему да? Приведите примеры.

12. Если объект не может ответить на сообщение, возможно ли это как-то обработать, перехватить? Почему нет | да? Приведите пример.
13. Будет ли создано две объекта-функции «m» при создании двух инстансов одного класса? А два объекта-метода? Почему равенство методов выдаёт False? См. пример:

class A(object):
    def m(self):
        pass

a = A()
b = A()

a.m == b.m # False

14. Возможны ли объекты без классов (например, точка с координатами x и y и методом перемещения)? Почему нет | да? Покажите пример.

Можно ещё придумать ;)
14 Вроде бы в питоне «все — объекты», а значит у всех есть классы
> 14 Вроде бы в питоне «все — объекты», а значит у всех есть классы

Логично (и верно). И вытекающий дополнительный вопрос — можно ли породить тот же объект-точку (с координатами x и y и методом .move) без объявления класса?
> без объявления класса?

Имеется в виду — без объявления какого-либо дополнительного класса.
>>14. Возможны ли объекты без классов (например, точка с координатами x и y и методом перемещения)? Почему нет | да? Покажите пример.

вот тут можно уходить с собеседования
> вот тут можно уходить с собеседования

Почему? Считаете себя асом, не желающим тратить время на «дурацкие вопросы»? ;)
вопрос вообще не понятный какой-то, что именно понимается под объектом без класса, может там про статические методы спросить хотели? :) до про далековато, но блин
все ок, перечитал вопрос и комент выше :)
— Чем грозит объявление функции
def foo(a=[]):

— Что такое декораторы и как они работают

— Чем отличается [x for x in range(10)] от (x for x in range(10))

> — Чем отличается [x for x in range(10)] от (x for x in range(10))

Кстати, ECMAscript в новых версиях тоже позаимствовал list comprehensions и генераторы у Питона.
> — Чем грозит объявление функции
> def foo(a=[]):

Дополнительный вопрос: как вернуть параметр «a» в состояние пустого списка после «грозящих» модификаций (допустим, функция foo вызвана три раза, внутри foo стоит a.append(1) — как на четвёртый вызов foo сделать так, чтобы «а» был пустым)?
И это всё? На эти вопросы даже я отвечу
Про «Ромбическое наследование» относительно питона не знал :-)
По-моему, такое лучше переписать, если попадается в своём коде. Стройная система классов, раз уж используется ООП — это must have.

А вообще, ООП это не панацея и старый добрый functional style ещё никто не отменял :-)
Вы неправильно находите последний элемент в массиве.
15. Каким образом функции «test» доступна локальная переменная «z» из функции «foo»?

def foo():
	z = 10
	def inner(x):
		print(x + z)
	return inner

test = foo()
test(5) # 15
test(10) # 20<pre>
После правильного ответа, уточните ответ <em>технически</em> (реализацию). Покажите на примере.
Доп. вопрос: можно ли получить доступ к переменной «z» посредством функции «test», не запуская «test»? Почему нет | да?
z копируется в локалс inner которая и отдается тесту по ссылке?
Логично — locals() (или, что тоже самое в данном случае — vars()), имеет ссылку на «z». Засчитывается, поскольку работает ;) Но есть одна особенность — locals() имеет ссылку на «z» при активации функции test, т.е. locals() заполняются при входе в функцию, а, значит, откуда-то черпают информацию. Откуда? И каким, тогда, должен быть ответ на доп. вопрос — можно ли получить значение «z» не запуская «test», т.е., по сути, без создания locals()?
foo.func_code.co_consts[1]?

а зачем это может пригодится?
Ух, какой старый топик подняли, я уж и забыл про него =)

> foo.func_code.co_consts[1]?

Речь шла о внутренней функции, доступной снаружи посредством имени test. Правильный ответ: функции test доступна локальная переменная «x» за счёт запоминания лексического контекста при порождении функции тест (т.е. функция inner — является замыканием).

Лексический контекст хранится в функции свойством __closure__:

test.__closure__[0].cell_contents

> а зачем это может пригодится?

Вопрос больше теоретического характера, на, более-менее, глубокое понимание технологии. Однако, и в прикладном программировании могут возникнуть случаи, когда нужно получить доступ к замкнутым данным.

P.S. если интересно, у меня написана статья о замыканиях. Там, правда, в Javascript, но общая теория одинаковая на многие технологии, включая Python.
Хм… Я во время изучения dir(func) наткнулся на __closure__, но моё гугл-фу не позволило мне понять, как-таки этот cell-object в человеческий вид привести. Оказыается вот как… Спасибо :)
16. Что может являться ключами словаря? Почему?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации