【问题标题】:Incrementing class variables dynamically in Python在 Python 中动态增加类变量
【发布时间】:2017-06-30 19:02:05
【问题描述】:

我有一个简单的类,每次创建该类的实例时,我都希望类变量增加我应该如何使用这段代码:

class Person:

    person_count = 0

    def __init__(self, username):
        self.username = username

ashley = Person("Ash")
daphne = Person("Daph")

Person.person_count #I want this to be 2

【问题讨论】:

    标签: python


    【解决方案1】:

    只需增加__init__中的类变量:

    class Person(object):
    
        person_count = 0
    
        def __init__(self, username):
            self.username = username
            Person.person_count += 1  # here
    
    ashley = Person("Ash")
    daphne = Person("Daph")
    
    print(Person.person_count)
    # 2
    

    如果您使用的是 Python 2,请不要忘记从 object 继承子类。

    What is the purpose of subclassing the class "object" in Python?

    【讨论】:

      【解决方案2】:

      您必须将__init__ 中的类变量递增为:

      class Person:
          person_count = 0
          def __init__(self, username):
              self.username = username
              self.__class__.person_count += 1
              # OR, 
              # Person.person_count += 1
      

      例子:

      >>> ashley = Person("Ash")
      >>> ashley.person_count
      1
      >>> daphne = Person("Daph")
      >>> daphne.person_count
      2
      

      您也可以直接使用以下类提取计数:

      >>> Person.person_count
      2
      

      【讨论】:

        【解决方案3】:

        使用__init__ 方法来增加你的类变量:

        class Person:
            person_count = 0
            def __init__(self, username):
                self.username = username
                Person.person_count += 1
        

        可以使用类的名称访问类变量,因此在本例中为Person。请记住,您也可以从实例中访问此类变量,因此:

        >>> p1 = Person('person1')
        >>> Person.person_count
        1
        >> p1.person_count
        1
        >> p2 = Person('person2')
        >>> Person.person_count
        2
        >> p1.person_count
        2
        >> p2.person_count
        2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-08-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-18
          • 2014-01-14
          • 2012-01-08
          相关资源
          最近更新 更多