Найти - Пользователи
Полная версия: Получение класса из декоратора метода
Начало » Python для новичков » Получение класса из декоратора метода
1
yrttyr
#!/usr/bin/env python
# -*- coding: utf-8 -*-

def d(fn):
print fn.__name__
#Получит сдесь Cls

class Cls(object):
@d
def pr(self):
print(a)
Возможно ли такое?
Isem
print fn.__class__
yrttyr
Isem
print fn.__class__
Возращает <type ‘function’>. Не то.
bw
Вот так вот придумал:
def mydec(meth):
import inspect
clsframe = inspect.currentframe(1)
cls = clsframe.f_globals[clsframe.f_code.co_name]
return meth
Других способов не нашёл.

..bw
yrttyr
Падает с ошибкой, но имя класса находит. Спасибо.

Ладно может я иду неправильной дорогой. Я написал небольшой модуль sender. Он занимается отправкой данных.
Например:
@sender.send_cls()
class Game(object):
send_start = 'getAllCoord', 'getAllDrawData'
send_request = 'getChangeCoord',

def getAllCoord(self):
return ....

def getAllDrawData(self):
return ...

def getChangeCoord(self):
return ...
Теперь если кто-то подключается к sender'u к экземпляру класса Game то он сразу получает данные из функций в send_start, и периодически из send_request.
Но вот мне для каждого метода потребовались указывать дополнительные данные для sender'a.
Можно конечно сделать так:
@sender.send_cls()
class Game(object):
send_start = [['getAllCoord', 'vasya'], ['getAllDrawData', 'olya']]
send_request = [['getChangeCoord', 'kolya'],]

........
Но мне показалось, что так было бы красивей:
@sender.send_cls()
class Game(object):

@sender.send_meth('vasya')
def getAllCoord(self)
return ....

@sender.send_meth('olya')
def getAllDrawData(self):
return ...

@sender.send_meth('kolya')
def getChangeCoord(self):
return ...
Как по вашему лучше сделать?
Андрей Светлов
Записывайте в send_meth параметры как атрибут у декорируемой функции. Из send_cls они доступны.
yrttyr
Андрей Светлов, пожалуй так и сделаю.
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