Python使用多个对象的默认数据初始化变量

2024-06-13 14:56:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在没有参数的构造函数中使用默认值初始化变量,如下所示:

class Persons()
   def __init__(self):
      self.name="Joan"

p1=Persons()
print(p1.name)

因此,这个结果将是“琼”。它将打印此人的姓名。一切都好。但是如何对多个对象执行此操作?我想用不同的名称打印p2.namep3.name,就像上面一样

我从一个要求我“创建一个不带参数的构造函数,用默认数据初始化变量”的练习中得到了这个信息


Tags: 对象nameself名称参数initdefclass
3条回答

如果您的类可以提供一组可能的名称,那么您可以创建一个对象,每个对Person.__init__的调用都可以从中获得不同的名称。例如:

from itertools import cycle

class Person:
    names = cycle(["Alice", "Bob", "Carol", "Dan"])

    def __init__(self):
        self.name = next(Person.names)

根据需要向池中添加尽可能多的名称

一旦初始名称集用完并且循环再次开始,名称必然会重复。再多做一点工作,我们至少可以改变每个周期产生名称的顺序:

from itertools import cycle
import random


class Person:
    def shuffled_cycle(names):
        while True:
            random.shuffle(names)
            yield from names

    names = shuffled_cycle(["Alice", "Bob", "Carol", "Dan"])

    def __init__(self):
        self.name = next(Person.names)

当然,如果不担心重复的名字,只需从__init__内部调用random.choice。这要简单得多:

import random


class Person:
    def __init__(self):
        self.name = random.choice(["Alice", "Bob", "Carol", "Dan"])

到了极点,只需从一堆原始字母中生成随机名称:

import random
import string

class Person:
    def __init__(self):
        k = random.randint(3, 10)
        self.name = ''.join(random.sample(string.ascii_lowercase, k)).title()

只需添加名称作为参数:

class Persons()
   def __init__(self, name):
      self.name = name
p1=Persons(“Joan”)
print(p1.name)

p1.name = “Jim”

问题是你想用默认值初始化,你写的代码是正确的。每个“Person”类的新实例都会用相同的默认值初始化,这是很好的编码实践。因为它是相同的“default”值。然而,出于知识的考虑,我已经编写了一个小程序,可以给5个新的class Person实例起新的名字,但是不要在生产中使用,因为这是一种不好的做法,但有利于学习

class Person :
    #class Variable
    name_list=["Jhon","Naruto","James","Smith","Neo"]
    instance_count = 0

    def __init__(self):
        #Resets instance count when instances become greater that 5
        instance_count = instance_count%5  

        #Sets new name
        self.name = name_list[instance_count]

        #increment instance_count
        instance_count = instance_count + 1

相关问题 更多 >