python面向对象——私有属性

'''
私有属性
'''

'''
java:
 public  公有
 private 私有
 protected 保护
 
python:
    定义属性时,没有任何修饰 的都 是公有的
    如果在属性或方法前,加两个下划线前缀,那么这个属性或方法,python 解释 器就认为是私有的
'''


class Account(object):
    def __init__(self,name,balance):
        # 定义了两个公有属性,这两个属性在类的外部也是可以访问的
        # self.name = name
        # self.balance = balance

        # 因为公有的属性破坏程序的封装性,导致数据不安全,所以将属性定义私有的
        # 当一个类中的属性或方法,全部是私有时,这个类是无意义 的
        self.__name = name
        self.__balance = balance

    # 私有属性定义好后,可以保证数据 的访问安全
    # 但是还有需求去属性进行访问,可以通过 公有接口方法进行间接 访问
    # 一般对私有属性会提供 一种 称为 存取器方法的 公有方法
    # set/ get方法
    # set_属性名  get_属性名

    # 因为帐户名一旦确认后无需修改,所以可以不提供 set 方法
    # def get_name(self):
    def get_username(self):
        return self.__name


    # 给余额提供 存取方法
    def set_balance(self,new_balance):
        if isinstance(new_balance,int):
            self.__balance = new_balance
        else:
            print('不能存玉皇大帝的钱')

    def get_balance(self):
        return self.__balance




    # 定义一个查看信息的方法
    def show_info(self):
        # # 在类的内部,访问对象的公有属性
        # print(self.name + ' 有 ',self.balance ,'元')

        # 在类的内部,访问对象的私有属性
        print(self.__name + ' 有 ', self.__balance, '元')



jack = Account('JackMa',9999999)
# 在类的外部,访问对象的公有属性
# print(jack.name)
# print(jack.balance)
#
# jack.name = '郭'
# print(jack.name)
# print(jack.balance)

# 访问私有属性
# print(jack.__name)
# print(jack._Account__name)  # 只是让你了解私有的原理,但是不能这么使用

# 通过 接口方法来访问私有属性
print(jack.get_username())
print(jack.get_balance())

jack.set_balance(88888888)
print(jack.get_balance())
# jack.set_name('郭')
# print(jack._Account__username)

jack.set_balance('十个亿')
money = jack.get_balance()
print(money)
上一篇:Linux socket网络编程基础 tcp和udp


下一篇:状态模式(java)