代码之家  ›  专栏  ›  技术社区  ›  swasheck

python 2.7初始化行为

  •  1
  • swasheck  · 技术社区  · 14 年前

    我有一个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 = User(username='someusername')
    

    然后打印用户我只有一个新的dict对象 uid 由下的第一行生成 __init__

    3 回复  |  直到 14 年前
        1
  •  2
  •   bukzor    14 年前

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

    最简单的方法可能是简单地使用dict.update方法将所有键/值对复制到 自己 . 既然你已经从dict继承了,这应该“管用”。

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

        2
  •  0
  •   adw    14 年前

    def __init__(self,uid=None,username=None):
        dict.__init__(self)
        BaseDBI.__init__(self)
    

    也分配给 self 只替换局部变量中的值 自己

        3
  •  0
  •   John La Rooy    14 年前

    如果需要返回已经存在的实例或类,则需要定义 __new__

    到…的时候 __init__ 调用,则已创建新实例