Форум программистов, компьютерный форум, киберфорум
Наши страницы

Python

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
dscoma
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 9
#1

Вызов класса как функции - Python

18.02.2012, 22:50. Просмотров 1969. Ответов 2
Метки нет (Все метки)

У меня есть класс, который содержит несколько методов, однако открытых методов нет.
Мне нужно чтобы класс вызвался как функция, типа foo('some') и возвращал строку.

Сначала сделал так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#file 1
class foo:
    def __init__(self, value):
        self.data(value)
 
    __str__(self):
        return load() #str
 
    #...
 
 
#file 2
 
from foo import *
 
foo('some')
В этом варианте мне все нравилось, но __str__ не совместим с функциями принимающие строки.
К примеру если вызвать print(foo('some')), то вполне отработает, однако для других функций типа:
Python
1
open.write(foo('some'))) #вызовет ошибку
Чтобы ошибки не было нужно делать что-то вроде:

Python
1
open.write(str(foo('some'))))

Затем сделал так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#file 1
 
class __Foo:
    def __init__(self, value):
        self.data(value)
 
    def load(self):
        #...
 
        return 'string'
    
    
    #...
 
    
def foo(value):
    return __Foo(value).load()
 
 
#file 2
from foo import *
 
foo('some')
Что в общем-то решило проблему, однако способ какой-то корявый, как мне кажется.

Основной вопрос в том как правильно сделать так чтобы __str__ возвращал полноценную строку или как сделать проще, то о чем я написал в первом абзаце?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2012, 22:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вызов класса как функции (Python):

Вызов конструктора абстрактного базового класса - Python
Здравствуйте, в классе вызываю с помощью super() конструктор абстрактного базового класса -...

Вызов функции - Python
Господа, не ругайте... почему def add(x, y): return x + y add(1,10) print(add) возвращает

Вызов функции из Dll - Python
Помогите пожалуйста решить проблему. Вот код вызывает функцию из под vb.net. Private Declare Function goup Lib "my.dll" (ByVal a As...

Вызов функции из .dll с использованием ctypes - Python
Доброго времени суток. Недавно начал изучать python и мой вопрос, наверное, покажется сильно нубским, но тем не менее... Есть UserApi...

Имена текущих функции (метода), класса, объекта - Python
Доброго времени суток. Возможно ли в Python при выполнении программы узнать имена выполняющейся в данный момент функции (метода),...

Как различается вызов xcopy в cmd.exe и os.system()? - Python
Почему, когдв в CMD.EXE исполняю команду XCOPY /Y D:\cooc\01\cookies.sqlite C:\FZ\Data\profile\cookies.sqlite все ок. А если запускаю...

2
bodrich
98 / 88 / 2
Регистрация: 20.06.2010
Сообщений: 964
Записей в блоге: 16
Завершенные тесты: 1
19.02.2012, 11:43 #2
Может вот так ?
Python
1
2
3
4
5
6
class foo:
        def __init__(self, value):
                self.value = value
        def __str__(self):
                return self.value
print(foo('some'))
0
dscoma
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 9
19.02.2012, 12:14  [ТС] #3
Цитата Сообщение от bodrich Посмотреть сообщение
Может вот так ?
Python
1
2
3
4
5
6
class foo:
        def __init__(self, value):
                self.value = value
        def __str__(self):
                return self.value
print(foo('some'))
Так я в первом сообщении тоже самое написал. В этом случае другие функции, которые рассчитывают принять строку типа open():

Python
1
open(foo('some')).write()
Будут ругаться:
Python
1
2
3
4
Traceback (most recent call last):
  File "foo.py", line 10, in <module>
    file.write(foo('some'))
TypeError: must be str, not foo
Поэтому приходится оборачивать в str():

Python
1
open(str(foo('some'))).write()
Но это коряво, на мой взгляд.

По этой причине я сделал так (сделал класс приватным и отделил его функции):

Python
1
2
3
4
5
6
7
8
class __hidden_class:
        def __init__(self, value):
                self.value = value
        def __str__(self):
                return self.value
 
def foo(value):
    return str(__hidden_class(value))
Однако мне кажется, что так никто не делает.


Можно конечно сделать еще так:
Python
1
2
3
4
5
6
7
class foo:
        def __init__(self, value):
                self.value = value
        def get(self):
                return self.value
 
foo('some').get()
Но так совсем не понятен смысл вызова.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 12:14
Привет! Вот еще темы с ответами:

Вызов функции из одного класса кнопкой из другого класса - C++ Qt
Доброго времени суток. Помогите разобраться с сигналами и слотами. Уже устал перечитывать не могу до конца понять один момент. У меня...

Вызов функции из класса - C++
есть функция объявленная в классе Calendar void calendar::menu_k() { cout&lt;&lt;&quot;\n\n&quot;; set_color(cGREEN); cout&lt;&lt;&quot;МЕНЮ&quot;&lt;&lt;endl; ...

Вызов функции из класса - Программирование Android
как сменить цвет из одного класса в другом классе в главном классе: RelativeLayout rel; rel =...

Вызов функции класса из строки - PHP ООП
Привет, есть класс который хранит нужный класс и (string) имя функции class Test{ var $class; var $function; } Вопрос как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru