这是在 Python 类之间共享函数的有效方法吗?



我的目标是在Python中的多个类中使用相同的函数。

我看过关于混合和继承等的讨论,但它们似乎都带有关于做正确的事情的警告和警告。

所以我想知道我是否可以调用另一个存在于类之外的普通旧函数。 它似乎有效,但也许我无法理解重要的事情?

所以我的问题是 - 这是在 Python 类之间共享函数的有效方法吗?

def clean_reference_url(self):
    if not self.cleaned_data['reference_url']:
        return ''
    try:
        if 'illegaltext' in self.cleaned_data['reference_url']:
            raise Exception
    except:
        raise forms.ValidationError('You cannot put illegaltext in this field.')
    return self.cleaned_data['reference_url']
class ContactForm(forms.ModelForm):
    def clean_reference_url(self):
        return clean_reference_url(self)
class TripForm(forms.ModelForm):
    def clean_reference_url(self):
        return clean_reference_url(self)

这是有效的,但没有必要有额外的包装层。混合方法是最简单的,但是是的,它有一些警告(主要与元类有关),所以如果你想避免这种情况,你仍然可以在每个类的定义期间设置一个方法。保持函数定义相同,并将类更改为:

class ContactForm(forms.ModelForm):
    clean_reference_url = clean_reference_url
class TripForm(forms.ModelForm):
    clean_reference_url = clean_reference_url

同样,混合甚至更干净,例如:

class CleanableUrl:  # Change name as appropriate
    def clean_reference_url(self):
        # ...
class ContactForm(CleanableUrl, forms.ModelForm):
    # No need to talk about clean_reference_url at all
class TripForm(CleanableUrl, forms.ModelForm):
    # No need to talk about clean_reference_url at all

它通常是最 Python 的方法,假设它适用于你的场景(基类型上没有冲突的元类)。

相关内容

  • 没有找到相关文章

最新更新