Python3超级未初始化__init__属性

时间:2018-07-16 09:10:39

标签: python-3.x inheritance super

我有以下代码段:

class BaseUserAccount(object):
    def __init__(self):
        accountRefNo = "RefHDFC001"
        FIType = "DEPOSIT"
        pan = "AFF34964FFF"
        mobile = "9822289017"
        email = "manoja@cookiejar.co.in"
        aadhar = "5555530495555"


class TestUserSavingsAccount(BaseUserAccount):
    def __init__(self):
        super().__init__()
        accountNo = "HDFC111111111111"
        accountTypeEnum = "SAVINGS"

    def test_create_account(self):
        request_body = """\
            <UserAccountInfo>
                <UserAccount accountRefNo="{}" accountNo="{}"
                accountTypeEnum="{}" FIType="{}">
                    <Identifiers pan="{}" mobile="{}" email="{}" aadhar="{}"></Identifiers>
                </UserAccount>
            </UserAccountInfo>
        """.format(self.accountRefNo, self.accountNo, self.accountTypeEnum,
                self.FIType, self.pan, self.mobile, self.email, self.aadhar)

如果我在交互式shell中运行以下代码:

>>> t = TestUserSavingsAccount()
>>> t.accountRefNo
AttributeError: 'TestUserSavingsAccount' object has no attribute 'accountRefNo'
>>> t.accountNo
AttributeError: 'TestUserSavingsAccount' object has no attribute 'accountNo'

看到以上行为,似乎super既没有设置基类的值,也没有设置子级(accountNoaccountTypeEnum)的属性。

1 个答案:

答案 0 :(得分:2)

您编写的方式仅将这些值分配给局部变量。您需要改为初始化self对象的属性:

class BaseUserAccount(object):
    def __init__(self):
        self.accountRefNo = "RefHDFC001"
        self.FIType = "DEPOSIT"
        self.pan = "AFF34964FFF"
        self.mobile = "9822289017"
        self.email = "manoja@cookiejar.co.in"
        self.aadhar = "5555530495555"


class TestUserSavingsAccount(BaseUserAccount):
    def __init__(self):
        super().__init__()
        self.accountNo = "HDFC111111111111"
        self.accountTypeEnum = "SAVINGS"