[python]Экземпляр класса как параметр по умолчанию
А че нет, замыкания же. Только param инициализируется один раз, это надо помнить.
creepnee
( 28.09.10 00:11:22 MSD )

мочь то можно, но это рассадник багов.
Zubchick ★
( 28.09.10 00:14:12 MSD )
Ответ на: комментарий от Zubchick 28.09.10 00:14:12 MSD
просто мне лень один объект все время явно передавать в разные функции, вот подумал, может его как параметр по умолчанию указать, но как это сделать не знаю
swelf ★
( 28.09.10 00:24:04 MSD ) автор топика

Глобальная переменная, нэ? Ее хотя бы поменять можно.
baverman ★★★
( 28.09.10 04:36:43 MSD )
а не судьба вот так сделать:
[code] def f(param = null): if !a a = A() a.bla = ‘bla’ [/code]
питона не знаю, но, думаю, суть ясна
anonymous
( 28.09.10 08:01:51 MSD )
Ответ на: комментарий от swelf 28.09.10 00:24:04 MSD

true_admin ★★★★★
( 28.09.10 11:20:07 MSD )
Ответ на: комментарий от anonymous 28.09.10 08:01:51 MSD

анонимус прав на все 100. Так и делают когда хочется дефолтовым параметром передать, например пустой список. Но с объектом сложней, они могут иметь отличные от А() параметры. Вообще изменять объекты внутри функций не являющихся методами черевато, но никто не говорит, что этого нельзя делать.
Zubchick ★
( 28.09.10 11:29:42 MSD )
Ответ на: комментарий от true_admin 28.09.10 11:20:07 MSD
«Глобальный синглтон» в python — это модуль. Только и всего.
shylent ★
( 28.09.10 12:12:18 MSD )
Ответ на: комментарий от shylent 28.09.10 12:12:18 MSD

не обязательно. И там есть свои нюансы.
true_admin ★★★★★
( 28.09.10 13:02:34 MSD )
Ответ на: комментарий от true_admin 28.09.10 13:02:34 MSD
Эх, ну вы же понимаете, что про все что угодно можно сказать, что там «есть свои нюансы» без всяких объяснений.
Просто, в самом деле, наипростейший вариант реализации синглтона без всяких вывертов (тем более, что все эти выверты без проблем в python обходятся, благодаря его динамизму), это объект внутри модуля.
shylent ★
( 28.09.10 14:03:27 MSD )
Ответ на: комментарий от shylent 28.09.10 14:03:27 MSD

В моём понимании класс тоже может быть синглтоном и я бы загнал все глобальные переменные в класс(для красоты). Про нюанс я имел в виду что если сделать «from module import *», где * это простые типы данных типа int, str итп то работать не будет т.к. они при присвоении значения получится своя локальная копия переменной которая и будет изменена.
true_admin ★★★★★
( 28.09.10 14:32:50 MSD )
Ответ на: комментарий от true_admin 28.09.10 14:32:50 MSD
про синглтоны почитаю потом какнить, пока решил просто сделать функцию методом класса.
Как передать объект в метод класса? Python
Calculator().add_record(r1). Мне сейчас неудобно разжевывать это.
13 июл 2020 в 22:06
Вы не создали экземпляр класса Calculator .
13 июл 2020 в 22:07
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
как написали в комментарии, вы не создали экземпляр класса Calculator , после создания экземпляра класса вы можете обращаться к его методам.
class Calculator: def __init__(self, limit): self.limit = limit self.records = [] def add_record(self, some_record): self.records.append(some_record) class Record: def __init__(self, amount, comment): self.amount = amount self.comment = comment r1 = Record(120, 'Пирожок') с1 = Calculator(10) с1.add_record(r1)
Как передать функцию как параметр в Python?
Поскольку функция в Python является объектом, ее можно передавать в другую функцию в качестве аргумента. При этом функция в аргументе указывается без круглых скобок, то есть передается только ссылка на функцию.
def calculate(a, b, operation): result = operation(a, b) return result def sum(a, b): return a + b def multiply(a, b) return a * b calculate(2, 3, sum) # 5 calculate(3, 4, multiply) # 12
Функции, которые могут принимать другие функции в качестве аргументов, также называются функциями высшего порядка. Яркий пример функции высшего порядка — функция map() , которая принимает аргументом функцию и итерируемую последовательность, и применяет функцию-параметр к каждому элементу последовательности.
Python: как передать атрибут класса из функции в функцию?
Через функцию choice узнается в какой пункт кинуть очко и передает в функцию pribafka. Но она только убавляет количество очков, и параметр персонажа не прибавляет. Через el/if внутри 2 функции всё работает, но многовато кода получается.
- Вопрос задан более трёх лет назад
- 3227 просмотров
Комментировать
Решения вопроса 1
Неудивительно. В функцию pribafka параметры передаются по значению. Внутри к параметру прибавляется единичка, но у нас копия в параметре, а не оригинал переменной! Потому ничего и не меняется. Надо так:
a = int(input(u»Пункт меню: «))
if a == 1:
self.sila = self.pribafka(self.sila)
elif a == 2:
self.lovkost= self.pribafka(self.lovkost)
def pribafka(self, param):
param += 1
self.score -= 1
print(u»прибавлено»)
Ответ написан более трёх лет назад
Нравится 3 2 комментария
Ещё забыл. В функции pribafka дописать внизу return param
Илья @FireGM Автор вопроса
Спасибо, все работает.
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +3 ещё
Почему tesserat не распознает цифры? Зачеркнутый текст?
- 1 подписчик
- 2 часа назад
- 21 просмотр