python中的self不会设置私有属性

时间:2019-01-11 08:15:32

标签: python

Python示例,只是想知道 self 关键字的工作方式与Java中的 this 相似。 需要帮助来了解这两个输出。

下面是python的示例代码。

class A:

def __init__(self, a, b):
    self.__a = a
    self.__b = b
    self.__abc = self.__call()

def __call(self):
    print('BEFORE :: ',self.__dict__)
    self.__abc = self.__a + self.__b
    print('AFTER :: ',self.__dict__)
    # return self.__a + self.__b        



def display(self):
    print(self.__abc)



>> a = A('HI', 'Hello')
>> print('INSTANCE :: ',a.__dict__)
>> a.display()

output-1 :
When return is commented
BEFORE ::  {'_A__a': 'HI', '_A__b': 'Hello'}
AFTER ::  {'_A__a': 'HI', '_A__b': 'Hello', '_A__abc': 'HIHello'}
INSTANCE ::  {'_A__a': 'HI', '_A__b': 'Hello', '_A__abc': None}
None

output-2 :
When return not  is commented, two line before return is commented
BEFORE ::  {'_A__a': 'HI', '_A__b': 'Hello'}
INSTANCE ::  {'_A__a': 'HI', '_A__b': 'Hello', '_A__abc': 'HIHello'}
HIHello

1 个答案:

答案 0 :(得分:1)

由于__call()方法中没有return语句,因此此方法将返回None

此值保存在构造函数的最后一行:

 #self.__call() returns None if the function doesn't has a return statement


 def __init__(self, a, b):
     self.__a = a
     self.__b = b
     self.__abc = self.__call()