Python 类中的方法为什么要操作一个_uinit__;变量
我有这类Python 类中的方法为什么要操作一个_uinit__;变量,python,class,Python,Class,我有这类记录 class Record(): def __init__(self, record): self.state_abbreviations = {'AL': 'Alabama'} self.raw_record = record self.is_valid = self.validate_record(self.raw_record) self.formatted_record = self.format_rec
记录
class Record():
def __init__(self, record):
self.state_abbreviations = {'AL': 'Alabama'}
self.raw_record = record
self.is_valid = self.validate_record(self.raw_record)
self.formatted_record = self.format_record(self.raw_record)
def validate_record(self, record):
if (record.get('provider_first_name') is None and
record.get('provider_last_name_legal_name') is None):
return False
return True
def format_record(self, record):
# swap state abbreviation for full state name
record_state = record.get('provider_business_practice_location_address_state_name')
full_state_name = self.state_abbreviations.get(record_state)
record['provider_business_practice_location_address_state_name'] = full_state_name
return record
当我实例化它时:
r = Record({'provider_first_name': 'is', 'provider_last_name_legal_name': 'fake',
'provider_business_practice_location_address_state_name': 'AL'})
我希望r.raw\u record
能给我
{'provider_business_practice_location_address_state_name': 'AL',
'provider_first_name': 'is',
'provider_last_name_legal_name': 'fake'}
但我得到的结果是:
{'provider_business_practice_location_address_state_name': 'Alabama',
'provider_first_name': 'is',
'provider_last_name_legal_name': 'fake'}
我不明白为什么原始记录会被
format\u record
函数操作。传递给record
构造函数的字典正被self.raw\u record
引用,它反过来被传递到format\u record
方法并在那里修改。在操作同一对象的所有这些部分中,这就是为什么您会在raw\u record
中看到更改
如果你想避免这种情况,你可以在某处复制一本字典。例如,在构造函数中:
self.formatted_record = self.format_record(self.raw_record.copy())
哦,很酷,谢谢。有没有一种更像蟒蛇的方式来从更高的层次来处理我正在做的事情?我真的不知道你在问什么,但代码在我看来并不糟糕,当然这取决于你在做什么。如果您需要额外的帮助,请考虑创建一个不同的问题,避免在评论中进行长时间的讨论。