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

Python使用多个对象的默认数据初始化变量,python,class,oop,object,constructor,Python,Class,Oop,Object,Constructor,我想在没有参数的构造函数中使用默认值初始化变量,如下所示: class Persons() def __init__(self): self.name="Joan" p1=Persons() print(p1.name) 所以这个结果是琼。它将打印此人的姓名。一切都好。但是如何对多个对象执行此操作?我想用不同的名字打印p2.name,p3.name,就像上面一样 我从一个要求我创建一个不带参数的构造函数的练习中得到了这一点,该构造函数使用默认数据初始化变量。只需将名称添加为

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

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

p1=Persons()
print(p1.name)
所以这个结果是琼。它将打印此人的姓名。一切都好。但是如何对多个对象执行此操作?我想用不同的名字打印p2.name,p3.name,就像上面一样


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

只需将名称添加为参数:

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


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

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)
当然,如果不担心重复的名字,只需从内部调用random.choice\uuuu init\uuuuuu即可。这要简单得多:

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()

问题是你想用默认值初始化,你写的代码是正确的。Person类的每个新实例都会用相同的默认值初始化,这是很好的编码实践。因为它是默认值,所以是相同的。然而,出于知识的考虑,我已经编写了一个小程序,可以给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

我想用不同的名称打印p2.name,p3.name-如果希望所有对象都使用默认值,那么它们都将具有相同的名称。您可以从列表中随机选择:self.name=random.choice[Joan,Alice,Bob,…],但是,即使忽略创建的对象多于可用名称的情况,也不能保证每个实例都有一个唯一的名称。练习是否确实说每次都需要以不同的方式初始化实例变量?是的,这会起作用,但练习说构造函数不应该有参数,在本例中,有一个参数:name
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