【问题标题】:Is it possible to append a list declared static in python class?是否可以在 python 类中附加声明为静态的列表?
【发布时间】:2021-07-12 19:21:13
【问题描述】:

我有以下 python 代码:

class university: 
    q_university = []
    
    def __init__(self, name, ranking, country):
        self.name = name
        self.ranking = ranking
        self.country = country 

    @staticmethod
    def create_object(name, ranking, country):
        university_object = university(name,ranking,country)
        q_university.append(university_object)
        return university_object

我想创建 q_university 声明为静态的,所以我可以将大学对象附加到它。但是,当我在函数外声明它时,我无法在函数内访问它。

有什么建议吗?

【问题讨论】:

    标签: python class variables static


    【解决方案1】:

    q_university 变量是静态变量或类变量。因此,它不属于任何特定对象,而是属于类。因此,要在方法内访问它,您必须使用类名,如下所示:university.q_university

    class university: 
        q_university = []
        
        def __init__(self, name, ranking, country):
            self.name = name
            self.ranking = ranking
            self.country = country 
    
        @staticmethod
        def create_object(name, ranking, country):
            university_object = university(name,ranking,country)
            university.q_university.append(university_object)
            return university_object
    
    obj = university.create_object("test",1,"count")
    obj2 = university.create_object("test2",1,"count2")
    
    #output - test2
    print(obj2.name)
    
    #output - 2
    print(len(university.q_university))
    

    这类似于您访问静态方法的方式。您必须使用university.create_object(...) 访问您的静态方法。

    【讨论】:

      【解决方案2】:

      使用classmethod

      class university: 
          q_university = []
          
          def __init__(self, name, ranking, country):
              self.name = name
              self.ranking = ranking
              self.country = country 
      
          @classmethod
          def create_object(cls, name, ranking, country):
              university_object = cls(name,ranking,country)
              cls.q_university.append(university_object)
              return university_object
      

      【讨论】:

        猜你喜欢
        • 2012-07-05
        • 2013-11-19
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多