我試圖將傳遞給init
的所有參數分配給類。我不能得到的參數,也沒有階級self
(該self
是init
被作爲第一個參數傳遞):在裝飾器中自動分配初始化參數
class unpack_arguments(object):
def __init__(self, f):
self.f = f
def __call__(self, *args, **kwargs):
import ipdb; ipdb.set_trace()
class SomeObject(object):
@unpack_arguments
def __init__(self, one=1, two=2, three=3, four=4):
pass
# At this point, you can do
#
# obj = SomeObject()
# obj.one # 1
# obj.two # 2
# obj.three # 3
# obj.four # 4
obj = SomeObject()
我試圖找到的東西,但無法找到SomeObject的類實例或類似one
鍵名,two
等:
ipdb> kwargs
{}
ipdb> args
self = <__main__.unpack_arguments object at 0x1077a3f60>
args =()
kwargs = {}
ipdb> self.f
<function SomeObject.__init__ at 0x1077a06a8>
ipdb> dir(self.f)
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
ipdb> self.f.__defaults__
(1, 2, 3, 4)
ipdb> self.f.__kwdefaults__
ipdb> self.f.__kwdefaults__
ipdb>
能否請你描述的更大的問題你要解決這個問題呢?你有沒有嘗試過讓你的裝飾器成爲一個函數 - 這更容易理解? – 9000
不完全一樣的東西,但對於類似的模式,看看'attrs'模塊(在pypi上)... –
我想分配給裝飾器中的任何類init的任何kwargs。我不介意任何一種方式,我只是從來沒有使用函數裝飾器,他們更困惑 – codyc4321