我目前正在从事一个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的工作方式很好奇,我认为这非常重要。。你知道吗
谢谢!!你知道吗
案例#1
在
__init__
中创建列表时,它包含指向2个字符串的指针。但是一旦创建了列表,name
和tooldetails
之间的链接就不可撤销地断开了。如果更新name
,tooldetails
将不会动态更新,除非告诉Python用新数据显式更新tooldetails
。你知道吗案例2
这里显式地告诉Python通过方法
_set_detail_list
重构tooldetails
,方法在get_details
中调用。更新name
和,然后告诉Python重建tooldetails
列表。因此,如果更新name
,然后再更新get_details
,列表将被更新。你知道吗相关问题 更多 >
编程相关推荐