【问题标题】:Is using "type" as an attribute name a bad practice?使用“类型”作为属性名称是一种不好的做法吗?
【发布时间】:2015-06-01 14:00:57
【问题描述】:

我有以下 django 模型:

class SomeProfile(models.Model):
    type = models.CharField(max_length=1)

使用“类型”作为属性名称是否被认为是一种不好的做法?

这里的属性不是遮蔽“类型”,所以和this one不是同一个问题

【问题讨论】:

标签: python django


【解决方案1】:

这并没有什么问题。它不是python's reserved keywords 的成员。

但是,将方法命名为 type() 可能会令人困惑...

【讨论】:

  • 即使它有效,我也不会说它没有任何问题。至少可能会让读者感到困惑。
  • 它比 Django 使用id 的方式更令人困惑吗? id() 也是一个内置的...
  • 是的,我认为这不会让任何人感到困惑,因为如果不命名类或实例(例如 SomeProfile.type 或 instance.type)就无法访问它
  • 方法只是包含函数的对象的属性。你自相矛盾。不要使用内置名称,一旦遇到需要将常规变量命名为对象属性的情况。
【解决方案2】:

一般规则是:无论它们是否在“保留”关键字列表中(因为 python允许它,它并不是真正的“保留”)。这主要是为了避免在您实际需要使用真实对象时遇到麻烦(而不会注意到您在本地覆盖了它)。

如果您真的想使用其中一个名称,只需在末尾附加 _(例如 type_)。

在您的情况下,由于您将 type 指定为类属性,因此应该认为它是安全的,因为它只能通过其类(self.typeSomeProfile.type)访问。

【讨论】:

    【解决方案3】:

    是的 - 这是不好的做法。 type 从关键字的角度来看是非常笼统的词,但不是保留关键字。即使它当前在您的应用程序中没有出现任何问题,但它可能会在将来出现,因为它可能已用于一些已经存在的库或 python 扩展。

    示例:类型被用作函数来获取变量的TypeCast信息

    name = "John"
    age = 12
    
    print type(name)
    ## Above line will return "<type 'str'>"
    
    print type(age)
    ## Above line will return "<type 'int'>"
    

    type 用作attribute 是一种不好的做法。

    【讨论】:

    • 那些是函数,不是属性
    • 当然——它的功能。但是将您的属性命名为type 肯定会造成混乱。当我们已经知道有一个名为type 的函数时,我建议不要将它用作属性名称。这可以被视为最佳实践。
    • 问题是关于 - 这是否是一个不好的做法。作为开发人员,您始终可以将属性命名为 type(其中 Python 不会阻止您),但是当我们想到 USABILITY + MAINTAINABILITY + READABILITY 时,这肯定是一个不好的做法。最重要的是,如果某些事情对编码实践没有任何意义,那么为什么要这样做。而不是type,人们总是可以使用category_type || entity_type 也会更有意义。
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2012-02-24
    • 2021-05-31
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多