gpt4 book ai didi

python 2.7 __init__ 对自身的行为

转载 作者:行者123 更新时间:2023-12-01 06:14:17 26 4
gpt4 key购买 nike

我有一个 python 问题,我确信这个问题非常简单 - 请随时纠正我的任何不良做法。我有以下代码:

class User(dict,BaseDBI):
def __init__(self,uid=None,username=None):
self['uid']=str(uuid())
if uid == None and username is not None:
uid_struct = self.Get('data/username.kch',username)
if uid_struct is not None:
self = self.Get('data/user.kch',uid_struct['uid'])

正如你所知,这个 User 只是一个扩展的 dict 对象。它还访问几个京都内阁数据库文件上的一些简单的获取和设置方法。我放入了一些打印语句来跟踪正在发生的事情,并且一切都设置正确,但是当我创建一个 User 对象时(例如):

user = User(username='someusername')

然后打印用户我只有一个新的字典对象,它具有由__init__下第一行生成的全新uid

感谢您的智慧!

最佳答案

Python 变量是引用。当您分配给 self 时,您将替换该引用,但不会更改 __init__ 返回的对象。

最简单的事情可能是简单地使用 dict.update 方法将所有键/值对复制到 self 中。这应该“正常”,因为您已经从 dict 继承了。

继承仅适用于像A is a B这样的关系。您指出 User 是一个 dict,这很好,但我怀疑 User 是 BaseDBI。您更有可能希望用户拥有一个数据库,在这种情况下组合更合适。这可能看起来很挑剔,但会阻止你制作奇怪和淫秽的系统。

关于python 2.7 __init__ 对自身的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4126517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com