Как передать класс в функцию python
Перейти к содержимому

Как передать класс в функцию python

  • автор:

[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) 

Отслеживать

75.2k 120 120 золотых знаков 38 38 серебряных знаков 57 57 бронзовых знаков

Python: как передать атрибут класса из функции в функцию?

Через функцию choice узнается в какой пункт кинуть очко и передает в функцию pribafka. Но она только убавляет количество очков, и параметр персонажа не прибавляет. Через el/if внутри 2 функции всё работает, но многовато кода получается.

  • Вопрос задан более трёх лет назад
  • 3266 просмотров

Комментировать
Решения вопроса 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

  • Python
  • +1 ещё

Почему парсер не нажимает кнопку?

  • 1 подписчик
  • 16 минут назад
  • 8 просмотров

Как передать функцию как параметр в 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() , которая принимает аргументом функцию и итерируемую последовательность, и применяет функцию-параметр к каждому элементу последовательности.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *