python实例化次数怎么算_我需要一个Python类来跟踪它被实例化了多少次

滥用装饰器和元类。在def counting(cls):

class MetaClass(getattr(cls, '__class__', type)):

__counter = 0

def __new__(meta, name, bases, attrs):

old_init = attrs.get('__init__')

def __init__(*args, **kwargs):

MetaClass.__counter += 1

if old_init: return old_init(*args, **kwargs)

@classmethod

def get_counter(cls):

return MetaClass.__counter

new_attrs = dict(attrs)

new_attrs.update({'__init__': __init__, 'get_counter': get_counter})

return super(MetaClass, meta).__new__(meta, name, bases, new_attrs)

return MetaClass(cls.__name__, cls.__bases__, cls.__dict__)

@counting

class Foo(object):

pass

class Bar(Foo):

pass

print Foo.get_counter() # ==> 0

print Foo().get_counter() # ==> 1

print Bar.get_counter() # ==> 1

print Bar().get_counter() # ==> 2

print Foo.get_counter() # ==> 2

print Foo().get_counter() # ==> 3

你可以通过频繁使用双下划线的名字来判断它是Python。(开玩笑,开玩笑…)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值