Найти - Пользователи
Полная версия: как сделать метод класса и статичным и динамическим одновременно?
Начало » Python для новичков » как сделать метод класса и статичным и динамическим одновременно?
1
Игнат
у меня есть класс 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
то буду изучать декораторы
agalen
Простой фокус не пройдет - вызов File.load('test.txt') даст исключение - первый параметр должен быть instance от File.
Так что изучай декораторы.
Studentik
class MyClass():
def MyFunc(self, myvar):
print(myvar)

MyClass().MyFunc("abc")
MyClass.MyFunc(None,"abc")
Андрей Светлов
classmethod/staticmethod
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB