代码之家  ›  专栏  ›  技术社区  ›  Wai Yip Tung

在Python中使用类作为命名空间是个好主意吗

  •  22
  • Wai Yip Tung  · 技术社区  · 15 年前

    class Direction:
    
      north = 0
      east = 1
      south = 2
      west = 3
    
      @staticmethod
      def turn_right(d):
        return turn_to_the_right
    
      @staticmethod
      def turn_left(d):
        return turn_to_the_left
    
    
    
    # defined a short alias because direction will be used a lot
    D = Direction
    
    d0 = D.north
    d1 = D.turn_right(d)
    

    不涉及太多的对象概念。在C++中,我将使用实际的语言关键字 namespace . Python中没有这样的东西。所以我试着用 class 为此目的。

    这是个好主意吗?这种方法有什么缺陷吗?

    我昨天刚回答了一个相关的问题。这个问题是以不同的方式提出的。这是一个我需要自己做的决定。

    Static method vs module function in python

    4 回复  |  直到 6 年前
        1
  •  18
  •   uchuugaka    10 年前

    是的,真的。可以严格地将Python类用于名称空间,因为这是它们可以做和做的与模块不同的特殊事情之一。将类定义为文件中内嵌的命名空间要比生成更多文件容易得多。 Python类有很多不同的形式和用途,这使得您很难理解以前从未见过的代码。

    作为名称空间的Python类与满足其他语言中类的感知的Python类一样是Python类。Python不需要实例化类就可以使用。它不需要ivars,也不需要方法。它相当灵活。

    类也可以包含其他类。

    很多人对什么是蟒蛇或不是蟒蛇有自己的想法。 但是,如果他们都担心像一致性这样的问题,他们会推动 len() dir() help() 是一个对象的方法,而不是一个全局函数。

    做有效的事,如果它不是通常或明显的用法,请评论/记录。

        2
  •  15
  •   mipadi    15 年前


    我看到了你对问题的评论。更明确地说,不,在Pythonic代码中,使用类来模拟名称空间是不正确的。模块用于对相关的类、函数和变量进行分组——请改用模块。一个类代表一个具有行为(方法)和数据(实例变量)的“东西”——它不仅仅是独立函数和变量的集合。

        3
  •  3
  •   Humphrey Bogart    15 年前

    ServerError 类比让他们都预先准备好更有意义 SERVER_ERROR 在模块中自由居住。

    做最直观的操作,但要避免名称空间污染。

        4
  •  2
  •   Katriel    15 年前

    是的,很好。你甚至可以使用 property 使方法看起来像属性。

    如果你有一个大类,使用模块可能会更简洁

    推荐文章