初始化后获取空列表

2024-05-29 10:10:44 发布

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

我是Python的初学者,我的项目的类有问题。结构如下:

你知道吗主.py(首先,main创建世界实例)

from world import World

world = World()

World知道所有其他类的一切(根据需要导入所有内容),并使用内容从继承的类PersonAttributes(其中存储“全局”变量以便所有类都可以访问它们)初始化以前的空列表。你知道吗

人物属性

class PersonAttributes:

    MALE_NAMES = []
    FEMALE_NAMES = []
    SURNAMES = []
    PROFESSIONS = []

    BABY = None
    CHILD = None
    TEEN = None
    YOUNGADULT = None
    ADULT = None
    SENIOR = None
    LIFESTAGES = (BABY, CHILD, TEEN, YOUNGADULT, ADULT, SENIOR)

世界

from utilities.person_attributes import PersonAttributes
from life_stage import Baby, Child, Teen, YoungAdult, Adult, Senior

class World(PersonAttributes):

    def __init__(self):

        # Initialize names from files
        self.MALE_NAMES = self.get_male_names()
        self.FEMALE_NAMES = self.get_female_names()
        self.SURNAMES = self.get_surnames()
        self.PROFESSIONS = self.get_professions()

        # Initialize life stages
        self.BABY = Baby(None, None, None, None)
        self.CHILD = Child(None, None, None, None)
        self.TEEN = Teen(None, None, None, None)
        self.YOUNGADULT = YoungAdult(None, None, None, None)
        self.ADULT = Adult(None, None, None, None)
        self.SENIOR = Senior(None, None, None, None)

        self.population = []
        self.populate_world()

World还导入LifeStage类,该类包含从Person继承的不同类。年轻人的例子(问题所在)

class YoungAdult(Person):

    def __init__()

        self.occupation = Randomizer().get_random_list_item(self.PROFESSIONS)

from utilities.person_attributes import PersonAttributes

class Person(PersonAttributes):

    def __init__():
        super(Person, self).__init__()

所以问题是自我职业. 我已经在世界上初始化了它,但当我实例化年轻人时(年轻人=YoungAdult(None,None,None,None)),PersonAttributes中的职业列表为空。为什么会发生这种情况?我如何解决?我没法摆脱自我职业属性,因为当一个人从十几岁开始长大时,年轻人类需要自动拥有一个职业。希望你们能理解我的意思,提前谢谢!你知道吗


Tags: fromimportselfnoneworldgetnamesinit
1条回答
网友
1楼 · 发布于 2024-05-29 10:10:44

类属性和实例属性之间有一个简单的区别。这也许能说明一些问题:

>>> class K:
...     a = 1
...     def set_a(self, v):
...         self.a = v
... 
>>> k = K()
>>> K.a
1
>>> k.a
1
>>> k.set_a(3)
>>> k.a
3
>>> K.a
1
>>> K.a = 5
>>> l = K()
>>> l.a
5
>>> k.a
3

一旦你设置了k.a(甚至通过self.a),它就会隐藏K.a。你知道吗

相关问题 更多 >

    热门问题