LINUX.ORG.RU

[python]Экземпляр класса как параметр по умолчанию

 


0

1

Собсно вопрос, можно ли в функцию передать как параметр по умолчанию конкретный экземпляр класса, типа такого

class A:
    pass
a = A()
def f(param = a):
    pass



Последнее исправление: swelf (всего исправлений: 2)

А че нет, замыкания же. Только param инициализируется один раз, это надо помнить.

creepnee
()
Ответ на: комментарий от Zubchick

просто мне лень один объект все время явно передавать в разные функции, вот подумал, может его как параметр по умолчанию указать, но как это сделать не знаю

swelf
() автор топика

Глобальная переменная, нэ? Ее хотя бы поменять можно.

baverman ★★★
()

а не судьба вот так сделать:

[code] def f(param = null): if !a a = A() a.bla = 'bla' [/code]

питона не знаю, но, думаю, суть ясна

anonymous
()
Ответ на: комментарий от anonymous

анонимус прав на все 100. Так и делают когда хочется дефолтовым параметром передать, например пустой список. Но с объектом сложней, они могут иметь отличные от А() параметры. Вообще изменять объекты внутри функций не являющихся методами черевато, но никто не говорит, что этого нельзя делать.

Zubchick
()
Ответ на: комментарий от true_admin

Эх, ну вы же понимаете, что про все что угодно можно сказать, что там «есть свои нюансы» без всяких объяснений.

Просто, в самом деле, наипростейший вариант реализации синглтона без всяких вывертов (тем более, что все эти выверты без проблем в python обходятся, благодаря его динамизму), это объект внутри модуля.

shylent
()
Ответ на: комментарий от shylent

В моём понимании класс тоже может быть синглтоном и я бы загнал все глобальные переменные в класс(для красоты). Про нюанс я имел в виду что если сделать «from module import *», где * это простые типы данных типа int, str итп то работать не будет т.к. они при присвоении значения получится своя локальная копия переменной которая и будет изменена.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

про синглтоны почитаю потом какнить, пока решил просто сделать функцию методом класса.

swelf
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.