python如何创建一个类,如何在python中为一个类动态创建类方法

If I define a little python program as

class a():

def _func(self):

return "asdf"

# Not sure what to resplace __init__ with so that a.func will return asdf

def __init__(self, *args, **kwargs):

setattr(self, 'func', classmethod(self._func))

if __name__ == "__main__":

a.func

I receive the traceback error

Traceback (most recent call last):

File "setattr_static.py", line 9, in

a.func

AttributeError: class a has no attribute 'func'

What I am trying to figure out is, how can I dynamically set a class method to a class without instantiating an object?

Edit:

The answer for this problem is

class a():

pass

def func(cls, some_other_argument):

return some_other_argument

setattr(a, 'func', classmethod(func))

if __name__ == "__main__":

print(a.func)

print(a.func("asdf"))

returns the following output

>

asdf

解决方案

You can dynamically add a classmethod to a class by simple assignment to the class object or by setattr on the class object. Here I'm using the python convention that classes start with capital letters to reduce confusion:

# define a class object (your class may be more complicated than this...)

class A(object):

pass

# a class method takes the class object as its first variable

def func(cls):

print 'I am a class method'

# you can just add it to the class if you already know the name you want to use

A.func = classmethod(func)

# or you can auto-generate the name and set it this way

the_name = 'other_func'

setattr(A, the_name, classmethod(func))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值