Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 6, 2011 07:30:13

yrttyr
От:
Зарегистрирован: 2011-09-06
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение класса из декоратора метода

#!/usr/bin/env python
# -*- coding: utf-8 -*-

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

class Cls(object):
@d
def pr(self):
print(a)
Возможно ли такое?



Офлайн

#2 Сен. 6, 2011 08:08:01

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

Получение класса из декоратора метода

print fn.__class__



Офлайн

#3 Сен. 6, 2011 08:20:04

yrttyr
От:
Зарегистрирован: 2011-09-06
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение класса из декоратора метода

Isem
print fn.__class__
Возращает <type ‘function’>. Не то.



Офлайн

#4 Сен. 6, 2011 08:22:11

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Получение класса из декоратора метода

Вот так вот придумал:

def mydec(meth):
import inspect
clsframe = inspect.currentframe(1)
cls = clsframe.f_globals[clsframe.f_code.co_name]
return meth
Других способов не нашёл.

..bw



Офлайн

#5 Сен. 6, 2011 08:57:10

yrttyr
От:
Зарегистрирован: 2011-09-06
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение класса из декоратора метода

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

Ладно может я иду неправильной дорогой. Я написал небольшой модуль 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 ...
Как по вашему лучше сделать?



Офлайн

#6 Сен. 6, 2011 12:56:12

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

Получение класса из декоратора метода

Записывайте в send_meth параметры как атрибут у декорируемой функции. Из send_cls они доступны.



Офлайн

#7 Сен. 6, 2011 13:43:16

yrttyr
От:
Зарегистрирован: 2011-09-06
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Получение класса из декоратора метода

Андрей Светлов, пожалуй так и сделаю.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version