python重写init
我希望能够通过以下方式从我的模型“ModelLog”运行函数:python重写init,python,constructor,init,Python,Constructor,Init,我希望能够通过以下方式从我的模型“ModelLog”运行函数: ModelLog.create_log(user, obj1, obj2) 而不是创建第一个空对象来传递它。 现在我发现这可以通过重写init来实现,但公平地说,这对我来说是全新的 my class ModelLog具有以下方法: class ModelLog(models.Model): def create_log(user_obj, old_obj, new_obj): """ Create a l
ModelLog.create_log(user, obj1, obj2)
而不是创建第一个空对象来传递它。
现在我发现这可以通过重写init来实现,但公平地说,这对我来说是全新的
my class ModelLog具有以下方法:
class ModelLog(models.Model):
def create_log(user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
"Some Code"
当我使用ModelLog.create_log(用户,obj1,obj2)执行我的create_log方法时,我得到以下错误:
TypeError:必须使用ModelLog实例作为第一个参数调用未绑定的方法create_log()(改为获取用户实例)
现在我想我需要做一些事情,比如:
def __init__(self, user_obj, old_obj, new_obj):
self.user_obj = user_obj
self.old_obj = old_obj
self.new_obj = new_obj
但是很明显,这不起作用,有人能帮我找到正确的方向并帮我解决吗?至于您的错误,您需要提供一个虚拟的第一个参数来创建日志,并将其声明为
@classmethod
:
class ModelLog:
@classmethod
def create_log(self, user_obj, old_obj, new_obj):
...
注意额外的
self
至于您的错误,您需要提供一个虚拟的第一个参数来创建日志,并将其声明为@classmethod
:
class ModelLog:
@classmethod
def create_log(self, user_obj, old_obj, new_obj):
...
注意额外的
self
至于您的错误,您需要提供一个虚拟的第一个参数来创建日志,并将其声明为@classmethod
:
class ModelLog:
@classmethod
def create_log(self, user_obj, old_obj, new_obj):
...
注意额外的
self
至于您的错误,您需要提供一个虚拟的第一个参数来创建日志,并将其声明为@classmethod
:
class ModelLog:
@classmethod
def create_log(self, user_obj, old_obj, new_obj):
...
注意额外的
self
问题是您调用的方法与类方法类似。在python中定义方法时,需要添加一个额外的参数,该参数表示调用对象实例或类(如您的情况)
因此,您应该重写您的代码:
def create_log(cls, user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
或者以一种更为通灵的方式:
@classmethod
def create_log(cls, user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
或者,如果需要静态方法:
@staticmethod
def create_log(user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
如果您感兴趣(困惑),我建议您阅读。问题是您调用的方法与类方法类似。在python中定义方法时,需要添加一个额外的参数,该参数表示调用对象实例或类(如您的情况) 因此,您应该重写您的代码:
def create_log(cls, user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
或者以一种更为通灵的方式:
@classmethod
def create_log(cls, user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
或者,如果需要静态方法:
@staticmethod
def create_log(user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
如果您感兴趣(困惑),我建议您阅读。问题是您调用的方法与类方法类似。在python中定义方法时,需要添加一个额外的参数,该参数表示调用对象实例或类(如您的情况) 因此,您应该重写您的代码:
def create_log(cls, user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
或者以一种更为通灵的方式:
@classmethod
def create_log(cls, user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
或者,如果需要静态方法:
@staticmethod
def create_log(user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
如果您感兴趣(困惑),我建议您阅读。问题是您调用的方法与类方法类似。在python中定义方法时,需要添加一个额外的参数,该参数表示调用对象实例或类(如您的情况) 因此,您应该重写您的代码:
def create_log(cls, user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
或者以一种更为通灵的方式:
@classmethod
def create_log(cls, user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
或者,如果需要静态方法:
@staticmethod
def create_log(user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
如果您感兴趣(困惑),我建议您阅读。如果您希望能够以静态方法(未链接到单个对象的方法)调用create\u log,则需要使用 试着做类似的事情
class ModelLog(models.Model):
@staticmethod
def create_log(user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
pass #Create your object here
你可能不需要为这个用例定制你的
\uuuu init\uuuu
方法,现在就忘了这一点。如果你想能够调用create\u log作为一个静态方法(一个没有链接到单个对象的方法),你需要使用
试着做类似的事情
class ModelLog(models.Model):
@staticmethod
def create_log(user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
pass #Create your object here
你可能不需要为这个用例定制你的
\uuuu init\uuuu
方法,现在就忘了这一点。如果你想能够调用create\u log作为一个静态方法(一个没有链接到单个对象的方法),你需要使用
试着做类似的事情
class ModelLog(models.Model):
@staticmethod
def create_log(user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
pass #Create your object here
你可能不需要为这个用例定制你的
\uuuu init\uuuu
方法,现在就忘了这一点。如果你想能够调用create\u log作为一个静态方法(一个没有链接到单个对象的方法),你需要使用
试着做类似的事情
class ModelLog(models.Model):
@staticmethod
def create_log(user_obj, old_obj, new_obj):
""" Create a log about the changes of an object"""
pass #Create your object here
你可能不需要为这个用例定制你的
\uuuu init\uuuu
方法,现在就忘了它。我花了5分钟的时间试图理解你的意图。但是我不能说我明白了。你的模型日志是从任何类继承的吗?很抱歉我解释得不好,正如我说的,我真的不明白init是如何工作的。我想是的,我使用的是Django框架,所以我的模型是类ModelLog(models.model):您的ModelLog
是一个类还是一个模块(一组方法)?我的完整django模型我试图理解你5分钟的意图。但是我不能说我明白了。你的模型日志是从任何类继承的吗?很抱歉我解释得不好,正如我说的,我真的不明白init是如何工作的。我想是的,我使用的是Django框架,所以我的模型是类ModelLog(models.model):您的ModelLog
是一个类还是一个模块(一组方法)?我的完整django模型我试图理解你5分钟的意图。但是我不能说我明白了。你的模型日志是从任何类继承的吗?很抱歉我解释得不好,正如我说的,我真的不明白init是如何工作的。我想是的,我使用的是Django框架,所以我的模型是类ModelLog(models.model):您的ModelLog
是一个类还是一个模块(一组方法)?我的完整django模型我试图理解你5分钟的意图。但是我不能说我明白了。你的模型日志是从任何类继承的吗?很抱歉我解释得不好,正如我说的,我真的不明白init是如何工作的。我想是的,我使用的是Django框架,所以我的模型是类ModelLog(models.model):您的ModelLog
是一个类还是一个模块(一组方法)?我的完整django模型感谢这似乎有效,现在我可以在谷歌上更多地了解我实际在做什么。这似乎有效,现在我