给模型类动态添加方法

想要在每个类上加个方法或者property,一种可以每个类下加,另一种如下

def get_test(self):
    return 1

from django.contrib.contenttypes.models import ContentType
model_list = [‘CommonSite‘]  # 或者也可以直接传类对象,下面就不用ContentType了
for obj in model_list:
    # ContentType.objects.get(model=obj).model_class().__dict__.update(get_test=get_test)  这句报错‘dictproxy‘ object does not support item assignment
    # ContentType.objects.get(model=obj).model_class().get_test=get_test
    setattr(ContentType.objects.get(model=obj).model_class(), ‘get_test‘, property(get_test))
    # setattr(CommonSite, ‘get_test‘, property(get_test))
    print CommonSite.__dict__
    print CommonSite.get_test
    print CommonSite.objects.get(pk=1).get_test
时间: 2024-07-29 18:59:49

给模型类动态添加方法的相关文章

给python类动态添加方法(method)

群里有人问如何做到 def foo(): pass class Bar(object): pass Bar.set_instance_method(foo) b = Bar() b.foo() 这个其实还是比较简单的, 只要写个函数给类设置属性即可, 可根据需求是否用函数包装下, 或者用staticmethod这个decorator: import functools def foo(): print 'hello world' class Bar(object): def __init__(s

使用runtime给类动态添加方法并调用 - class_addMethod

上手开发 iOS 一段时间后,我发现并不能只着眼于完成需求,利用闲暇之余多研究其他的开发技巧,才能在有限时间内提升自己水平.当然,“其他开发技巧”这个命题对于任何一个开发领域都感觉不找边际,而对于我来说,尝试接触 objc/runtime 不失为是开始深入探索 iOS 开发的第一步. 刚了解 runtime 当然要从比较简单的 api 开始,今天就罗列整理一下 class_addMethod 的相关点: 首先从文档开始. /** * Adds a new method to a class wi

Runtime(动态添加方法)

A问:  有没有使用过performSelector,什么时候使用?动态添加方法的时候使用过?怎么动态添加方法?用runtime?为什么要动态添加方法? B:Runtime(动态添加方法):OC都是懒加载机制,只要一个方法实现了,就会马上添加到方法列表中. app:免费版,收费版 QQ,微博,直播等等应用,都有会员机制 // 任何方法默认都有两个隐式参数,self,_cmd // 什么时候调用:只要一个对象调用了一个未实现的方法就会调用这个方法,进行处理 // 作用:动态添加方法,处理未实现 +

使用TypeDescriptor给类动态添加Attribute【转】

源文 : http://www.cnblogs.com/bicker/p/3326763.html 给类动态添加Attribute一直是我想要解决的问题,从msdn里找了很久,到Stack Overflow看了不少文章,算是最终有了答案. 先是有这样的一段解释 Attributes are static metadata. Assemblies, modules, types, members, parameters, and return values aren't first-class o

在类中添加方法和成员变量

在前面我们也了解到了Java语言的最小单位是类.在C语言中有着全局变量,在Java中也有. 在Java中添加全局变量(成员变量)是由三大部分组成的:访问修饰符.数据类型和成员变量. 而访问修饰符有这几种:public .private.protected或者不写(这种将使用默认访问修饰符). 我们在引用对象时,必须对其进行初始化,否则将会报错.如果我们不自己去初始化值,那马那么 电脑回自己默认初始值:0.0.0.null.false.空字符. 在Java类中添加方法也是由:访问修饰符.返回值.方

细说python类2——类动态添加方法和slots(转)

先说一下类添加属性方法和实例添加属性和方法的区别, 类添加属性属于加了一个以类为全局的属性(据说叫静态属性),那么以后类的每一个实例化,都具有这个属性.给类加一个方法也如此,以后类的每一个实例化都具备这个方法(但是据说叫动态方法.)但是给实例加一个属性,作用域就是这个实例,是与类没关系的(据说这种属性叫动态属性). Python类的实例可以动态的添加属性.举个例子,声明一个类A >>> class A(object):...   def __init__(self):...     pr

python 面向对象六 动态添加方法 __slots__限制动态添加方法

一.动态添加属性 1 >>> class Student(object): 2 pass 3 4 >>> st = Student() 5 >>> st.name = 'Jack' 6 >>> st.name 7 'Jack' 二.动态给实例添加方法 1 >>> from types import MethodType 2 >>> class Student(object): 3 pass 4 5

python 类对象和实例对象动态添加方法

1 class Person(): 2 def __init__(self, name): 3 self.name = name 4 5 6 def print_name(self): 7 print(self.name) 8 9 p = Person('Li') 10 import types 11 p.print_name = types.MethodType(print_name, p) # 绑定函数到对象 12 p.print_name() 13 14 15 @staticmethod

nn.Sequential()动态添加方法

之前我们使用nn.Sequential()都是直接写死的,就如下所示: # Example of using Sequential model = nn.Sequential( nn.Conv2d(1,20,5), nn.ReLU(), nn.Conv2d(20,64,5), nn.ReLU() ) # Example of using Sequential with OrderedDict model = nn.Sequential(OrderedDict([ ('conv1', nn.Con