Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将类中所有对象共享的变量增加1?_Python_Python 3.x_Class - Fatal编程技术网

Python 如何将类中所有对象共享的变量增加1?

Python 如何将类中所有对象共享的变量增加1?,python,python-3.x,class,Python,Python 3.x,Class,如何创建一个名为nextyear()的函数,将所有动物的年龄增加1岁 class Animal: def __init__(self, age): self.age=age animal1 = Animal (5) animal2 = Animal (7) animal3 = Animal (3) 您可以向类Animal添加方法以增加年龄: class Animal: def __init__(self, age): self.age=age de

如何创建一个名为nextyear()的函数,将所有动物的年龄增加1岁

class Animal:
  def __init__(self, age):
    self.age=age
animal1 = Animal (5)
animal2 = Animal (7)
animal3 = Animal (3)

您可以向类Animal添加方法以增加年龄:

class Animal:
    def __init__(self, age):
        self.age=age

    def increase_age(self):
        self.age+=1
for animal in animals:
    animal.increase_age()

for animal in animals:
    print(animal.age)
然后在创建动物时保留动物列表:

animals = []

animals.append(Animal(5))
animals.append(Animal(7))
animals.append(Animal(3))
使用循环增加年龄:

class Animal:
    def __init__(self, age):
        self.age=age

    def increase_age(self):
        self.age+=1
for animal in animals:
    animal.increase_age()

for animal in animals:
    print(animal.age)

输出:6 8 4

向类中添加函数:

class Animal:
    def __init__(self, age):
        self.age=age
    def add_year(self, years=1):
        self.age += years         # adds 1 year by default (accepts a param)

animal1 = Animal (5)
animal2 = Animal (7)
animal3 = Animal (3)

for i in (animal1, animal2, animal3):
    i.add_year()

print(animal1.age)
返回

6

您必须保留作为类实例的动物列表,并添加类方法以增加年龄:

class Animal:
    _animals = []
    def __init__(self, age):
        self.age = age
        self._animals.append(self)
        print(self._animals)

    @classmethod
    def one_year_more(cls):
        for animal in cls._animals:
            animal.age += 1

    def __str__(self):
        return "I'm an animal and I'm {} years old".format(self.age)

animal1 = Animal (5)
animal2 = Animal (7)
animal3 = Animal (3)

print(animal1)
# I'm an animal and I'm 5 years old

Animal.one_year_more()

print(animal1)
print(animal2)
# I'm an animal and I'm 6 years old
# I'm an animal and I'm 8 years old

可以使用类变量和属性:

class Animal:
    year = 0

    def __init__(self, age):
        self._age = age - self.__class__.year

    @property
    def age(self):
        return self._age + self.__class__.year

    @classmethod
    def next_year(cls):
        cls.year += 1


animal1, animal2, animal3 = Animal(5), Animal(7), Animal(3)

for animal in (animal1, animal2, animal3):
    print(animal.age)

print("Next year:")
Animal.next_year()
for animal in (animal1, animal2, animal3):
    print(animal.age)

好主意。使用类变量在所有类中共享。使用静态方法对其进行修改有助于实现干净的api。不在外面。这是干净的!在所有答案中,这可能是最干净的。我不喜欢维护一个实例列表,并在每一个迭代中都失败了。为了避免类名称<代码>动物< /代码>,考虑一个<代码> @ CaseMeave>代码>,而不是静态方法。然后
def下一年(cls):cls.year+=1
。对于其他实例方法,请使用
self.\uuuu class.\uuuuuu.year
而不是
Animal.year
@pylang当然,假设在第二年,如果您要添加一只1岁的新动物,请说
bob=Animal(1)
您希望
bob.age
成为
-1
,因此当您获得
bob.age
时,它将返回
-1+2=1
。如果我们不更改
\uuuu init\uuuu
bob将显示为3岁,而不是1岁,因为他出生在2岁。你想增加所有的年龄吗?一次性的?