python重写init

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”运行函数:

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模型感谢这似乎有效,现在我可以在谷歌上更多地了解我实际在做什么。这似乎有效,现在我