【问题标题】:Python / Django: Is it wise to use "Item" as a class name in Python (in Django in this case)?Python / Django:在 Python 中使用“Item”作为类名是否明智(在本例中为 Django)?
【发布时间】:2010-01-27 07:56:11
【问题描述】:

我正在创建这个:

# models.py

class Item(models.Model):
    sku = models.CharField(max_length=20)

class Attribute(models.Model):
    item = models.ForeignKey(Item, related_name='items')

这会导致 Python 中的命名冲突吗?喜欢:

# views.py

some_object.items.create(sku='123abc')

# Is there a place / way that this could cause errors, like:
# AttributeError: Bound method 'items' has no attribute "create"
# Since items() on a dict-like object could be a method to return a list,
# and Django could add support for .items() on a queryset right?

如果这是一个坏主意,我可以更改名称。

【问题讨论】:

    标签: python django naming-conventions naming


    【解决方案1】:

    它看起来确实有点笼统,但不比“属性”更笼统。如果可能的话,我会根据应用程序给它一个前缀。

    【讨论】:

    • “有点通用”?我会说它是如此模糊以至于毫无意义。肯定有比“物品”和“属性”更清晰和准确的名称。
    • “属性”不在应用程序中。这只是为了示例。有问题的课程是“项目”。如果有人在他们的商店里有一件“物品”,它就不能很好地适应“无意义”这个词,不是吗?可能使用这个术语的原因是,在电子商务世界中,“Item”往往比“Product”更普遍,虽然“Product”不一定能推断出混淆的可能性,但我保持开放请注意命名约定。
    【解决方案2】:

    模型与查询集不同,并且它们都没有被记录为类似于 dict。这样做应该没有任何问题。

    如果你真的很担心,那么尽可能多地公开这段代码,让人们使用它:) 如果没有别的,Django 核心团队真的很努力地检查尽可能多的“in-the-wild”代码就像他们在以任何方式扩展记录的 API 之前一样。他们真的很在意尽可能不破坏人们现有的代码。

    如果无法将其公开,那么至少查看邮件列表,这样当有人提议“嘿,让我们为 Model 添加一个 .items 方法!”时,您至少可以用“那个'会在正确的时间破坏我的代码'。

    【讨论】:

      【解决方案3】:

      这真的不是问题。如果您有一些随机对象并且觉得“项目”是方法的合适名称,那么请继续。它不会与碰巧在其他对象上使用的名称发生任何冲突。

      只要你认为方法名不会误导,不会引起混淆,就继续吧。

      【讨论】:

        【解决方案4】:

        使用默认的 item_set,没有问题 :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-18
          • 2017-01-19
          • 1970-01-01
          • 2021-07-13
          • 2018-08-12
          • 1970-01-01
          • 2012-02-27
          • 1970-01-01
          相关资源
          最近更新 更多