# -*- coding: utf-8 -*-
"""
Created on Sun Nov 13 23:19:03 2016

@author: toby
"""
#知识点:私有方法和私有字段
'''
应用场景:
不想被外部访问的东西,或者说不想暴露给外部的时候
那么就可以定义私有方法或私有字段
'''



class Province:
    memo = 'One of China\'s 23 provinces' #静态字段
    
    def __init__(self,name,capital,leadership,flag):
        self.Name = name #动态字段
        self.Capital = capital #动态字段
        self.Leadership = leadership #动态字段
        self.__Thailang = flag #定义一个私有字段
    
    #定义一个方法,实现在内部访问私有字段,让外部可以间接的访问这个私有字段
    def show(self):
        print self.__Thailang
    
    #也可以通过@property装饰器,构造一个特性实现在内部访问私有字段,让外部可以间接的访问这个私有字段
    @property
    def Thailang(self):
        return self.__Thailang
    
    #定义个私有方法
    def __sha(self):
        print 'hello world!'
    
    #定义个公有方法,实现在内部访问私有方法,让外部可以间接的访问到这个私有方法
    def Foo2(self):
        self.__sha()
    
    
if __name__ == "__main__":

    #实例化两个对象,对象名分别是:hb、sd
    japan = Province('riben','shjiazhuang','liyang',True) #值True传递给self.__Thailang
    
    #外部尝试访问私有字段提是无法访问的
    #print japan.__Thailang
    
    #间接的访问私有字段
    japan.show()
    
    #外部访问私有方法,是无法访问的
    #japan.__sha()
    
    #访问公有方法,实现间接访问私有方法
    japan.Foo2()
    
    #访问一下刚才通过@property装饰器构造的方法,看看能不能访问到私有字段,答案是可以的
    japan.Thailang