Comments 24
Вот про ромбическое наследование интересная ссылка.
На ООП можно несколько доп. вопросов:
11. Возможна ли делегация и композиция в Питоне? -> Почему нет? | Почему да? Приведите примеры.
12. Если объект не может ответить на сообщение, возможно ли это как-то обработать, перехватить? Почему нет | да? Приведите пример.
13. Будет ли создано две объекта-функции «m» при создании двух инстансов одного класса? А два объекта-метода? Почему равенство методов выдаёт False? См. пример:
14. Возможны ли объекты без классов (например, точка с координатами x и y и методом перемещения)? Почему нет | да? Покажите пример.
Можно ещё придумать ;)
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) без объявления класса?
Логично (и верно). И вытекающий дополнительный вопрос — можно ли породить тот же объект-точку (с координатами x и y и методом .move) без объявления класса?
>>14. Возможны ли объекты без классов (например, точка с координатами x и y и методом перемещения)? Почему нет | да? Покажите пример.
вот тут можно уходить с собеседования
вот тут можно уходить с собеседования
— Чем грозит объявление функции
def foo(a=[]):
— Что такое декораторы и как они работают
— Чем отличается [x for x in range(10)] от (x for x in range(10))
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 и генераторы у Питона.
Кстати, ECMAscript в новых версиях тоже позаимствовал list comprehensions и генераторы у Питона.
> — Чем грозит объявление функции
> def foo(a=[]):
Дополнительный вопрос: как вернуть параметр «a» в состояние пустого списка после «грозящих» модификаций (допустим, функция foo вызвана три раза, внутри foo стоит a.append(1) — как на четвёртый вызов foo сделать так, чтобы «а» был пустым)?
> def foo(a=[]):
Дополнительный вопрос: как вернуть параметр «a» в состояние пустого списка после «грозящих» модификаций (допустим, функция foo вызвана три раза, внутри foo стоит a.append(1) — как на четвёртый вызов foo сделать так, чтобы «а» был пустым)?
И это всё? На эти вопросы даже я отвечу
Про «Ромбическое наследование» относительно питона не знал :-)
По-моему, такое лучше переписать, если попадается в своём коде. Стройная система классов, раз уж используется ООП — это must have.
А вообще, ООП это не панацея и старый добрый functional style ещё никто не отменял :-)
По-моему, такое лучше переписать, если попадается в своём коде. Стройная система классов, раз уж используется ООП — это 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__:
> а зачем это может пригодится?
Вопрос больше теоретического характера, на, более-менее, глубокое понимание технологии. Однако, и в прикладном программировании могут возникнуть случаи, когда нужно получить доступ к замкнутым данным.
P.S. если интересно, у меня написана статья о замыканиях. Там, правда, в Javascript, но общая теория одинаковая на многие технологии, включая Python.
> foo.func_code.co_consts[1]?
Речь шла о внутренней функции, доступной снаружи посредством имени test. Правильный ответ: функции test доступна локальная переменная «x» за счёт запоминания лексического контекста при порождении функции тест (т.е. функция inner — является замыканием).
Лексический контекст хранится в функции свойством __closure__:
test.__closure__[0].cell_contents
> а зачем это может пригодится?
Вопрос больше теоретического характера, на, более-менее, глубокое понимание технологии. Однако, и в прикладном программировании могут возникнуть случаи, когда нужно получить доступ к замкнутым данным.
P.S. если интересно, у меня написана статья о замыканиях. Там, правда, в Javascript, но общая теория одинаковая на многие технологии, включая Python.
16. Что может являться ключами словаря? Почему?
Sign up to leave a comment.
Python. 10 вопросов на знание языка