Creating a static class with no instances

后端 未结 4 1156
长发绾君心
长发绾君心 2021-02-02 05:22

All of the tutorials I see online show how to create classes with __init__ constructor methods so one can declare objects of that type, or instances of that class.<

相关标签:
4条回答
  • 2021-02-02 05:38

    There are two ways to do that (Python 2.6+):

    static method

    class Klass(object):
        @staticmethod
        def static_method():
            print "Hello World"
    
    Klass.static_method()
    

    module

    your module file, called klass.py

    def static_method():
        print "Hello World"
    

    your code:

    import klass
    
    klass.static_method()
    
    0 讨论(0)
  • 2021-02-02 05:44

    The Pythonic way to create a static class is simply to declare those methods outside of a class (Java uses classes both for objects and for grouping related functions, but Python modules are sufficient for grouping related functions that do not require any object instance). However, if you insist on making a method at the class level that doesn't require an instance (rather than simply making it a free-standing function in your module), you can do so by using the "@staticmethod" decorator.

    That is, the Pythonic way would be:

    # My module
    elements = []
    
    def add_element(x):
      elements.append(x)
    

    But if you want to mirror the structure of Java, you can do:

    # My module
    class World(object):
      elements = []
    
      @staticmethod
      def add_element(x):
        World.elements.append(x)
    

    You can also do this with @classmethod if you care to know the specific class (which can be handy if you want to allow the static method to be inherited by a class inheriting from this class):

    # My module
    class World(object):
      elements = []
    
      @classmethod
      def add_element(cls, x):
        cls.elements.append(x)
    
    0 讨论(0)
  • 2021-02-02 05:55

    Seems that you need classmethod:

    class World(object):
    
        allAirports = []
    
        @classmethod
        def initialize(cls):
    
            if not cls.allAirports:
                f = open(os.path.expanduser("~/Desktop/1000airports.csv"))
                file_reader = csv.reader(f)
    
                for col in file_reader:
                    cls.allAirports.append(Airport(col[0],col[2],col[3]))
    
            return cls.allAirports
    
    0 讨论(0)
  • 2021-02-02 05:58

    You could use a classmethod or staticmethod

    class Paul(object):
        elems = []
    
        @classmethod
        def addelem(cls, e):
            cls.elems.append(e)
    
        @staticmethod
        def addelem2(e):
            Paul.elems.append(e)
    
    Paul.addelem(1)
    Paul.addelem2(2)
    
    print(Paul.elems)
    

    classmethod has advantage that it would work with sub classes, if you really wanted that functionality.

    module is certainly best though.

    0 讨论(0)
提交回复
热议问题