Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
dscoma
0 / 0 / 1
Регистрация: 04.01.2012
Сообщений: 9
1

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

18.02.2012, 22:50. Просмотров 2210. Ответов 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
Ответы с готовыми решениями:

Вызов из другого класса
Класс Child функция insert_data. Как правильно обратится к переменной с и сonn...

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

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

Вызов функции из Dll
Помогите пожалуйста решить проблему. Вот код вызывает функцию из под vb.net....

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

2
bodrich
98 / 88 / 13
Регистрация: 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 / 1
Регистрация: 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

Вызов функции из dll написанной на delphi из python
Импортировал ctypes, подключился к dll. Есть например такая функция: ...

Определение переменной класса в функции (python 3.6)
Не выходит использовать класс внутри функции main, в поисковике по этому поводу...

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


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

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

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