保存lis中其他现有属性的Python属性

2024-09-30 01:20:36 发布

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

我目前正在从事一个pythonsqlite项目,我对这两个项目都是新手。你知道吗

我创建了一个类,它在__init__方法中声明了一些属性。我需要另一个属性,它将是一个列表或数组,它将包含一些已经声明的类属性。我想要的是我的列表只包含原始属性的引用。你知道吗

我需要这个结构,以便能够一起调用这些属性,对它们进行迭代,但我也希望能够单独调用它们。你知道吗

首先,我尝试在rest声明之后在__init__方法中创建list属性。但是,当我创建一个实例并更改其中一个属性的初始值时,列表中的属性不会更新。你知道吗

然后我尝试在类的另一个方法中创建相同的list属性,而不是在init中,并从代码中调用它,它实现了我想要的。你知道吗

为什么不同的方法有不同的结果?你知道吗

以下是两种情况下的代码:

案例#1

class Tools():
    def __init__(self):
        self.name = "defaultname"
        self.manufacturer = "defaultmanuf"
        self.tooldetails = [self.name, self.manufacturer]

    def get_details(self):
        return self.tooldetails

案例2

class Tools():
    def __init__(self):
        self.name = "defaultname"
        self.manufacturer = "defaultmanuf"

    def _set_detail_list(self):
        self.tooldetails = [self.name, self.manufacturer]

    def get_details(self):
        _set_detail_list()
        return self.tooldetails

当我创建一个实例时:

tool1 = Tools()
tool1.name = 'abc'
tool1.get_details()

第一种情况给我["defaultname", "defaultmanuf"],而第二种情况给我["abc","defaultmanuf"]。你知道吗

我的问题是,python为每种情况提供不同输出的原因是什么?似乎我错过了一些重要的初始化工作。。你知道吗

dir()和其他类似的函数或魔术方法可以给我我想要的,但我认为如果你想要许多具有不同属性集的不同列表,它们不够灵活。不幸的是,对于sqlite字符串格式的命令,内省不能很好地工作。。你知道吗

另外,我对python的工作方式很好奇,我认为这非常重要。。你知道吗

谢谢!!你知道吗


Tags: 方法nameself声明列表属性initdef
1条回答
网友
1楼 · 发布于 2024-09-30 01:20:36

案例#1

__init__中创建列表时,它包含指向2个字符串的指针。但是一旦创建了列表,nametooldetails之间的链接就不可撤销地断开了。如果更新nametooldetails将不会动态更新,除非告诉Python用新数据显式更新tooldetails。你知道吗

案例2

这里显式地告诉Python通过方法_set_detail_list重构tooldetails,方法在get_details中调用。更新name,然后告诉Python重建tooldetails列表。因此,如果更新name,然后再更新get_details,列表将被更新。你知道吗

相关问题 更多 >

    热门问题