Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 8, 2011 11:37:01

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать метод класса и статичным и динамическим одновременно?

у меня есть класс File
у него метод load()

если создать объект класса и вызвать метод, то первым аргументов будет передан self:

f = File()
data = f.load('test.txt')

def load(self, name):
print(name) # test.txt
но мне хочется при этом иметь возможность вызывать load без создания доп. объекта
а при таком способе self недоступен, функция должна иметь 1 аргумент:
data = File.load('test.txt')

def load(name):
...
я придумал такой велосипед:
    def load(name, filename='', list=True):
if isinstance(name, File):
name = filename
print('load ', name)

1
f = File()
f.load('test.txt') # load test.txt

2
File.load('test.txt') # load test.txt
Т.е. есть запасной аргумент
и если первый аргумент является self, значит имя надо брать из второго аргумента
Собственно, есть ли более правильный способ?

Мб тут поможет декоратор, но я ни разу их не использовал. Если можно сделать декоратором типа
@universal
def method():
pass
то буду изучать декораторы



Офлайн

#2 Апрель 8, 2011 11:50:55

agalen
От:
Зарегистрирован: 2011-03-23
Сообщения: 185
Репутация: +  17  -
Профиль   Отправить e-mail  

как сделать метод класса и статичным и динамическим одновременно?

Простой фокус не пройдет - вызов File.load('test.txt') даст исключение - первый параметр должен быть instance от File.
Так что изучай декораторы.



Офлайн

#3 Апрель 8, 2011 12:17:36

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать метод класса и статичным и динамическим одновременно?

class MyClass():
def MyFunc(self, myvar):
print(myvar)

MyClass().MyFunc("abc")
MyClass.MyFunc(None,"abc")



Офлайн

#4 Апрель 8, 2011 12:19:44

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

как сделать метод класса и статичным и динамическим одновременно?

classmethod/staticmethod



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version