Python 如何将类中所有对象共享的变量增加1?
如何创建一个名为nextyear()的函数,将所有动物的年龄增加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
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岁。你想增加所有的年龄吗?一次性的?