ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python面向对象——私有属性

2021-11-14 03:01:01  阅读:196  来源: 互联网

标签:name python self 面向对象 jack 私有 print balance 属性


'''
私有属性
'''

'''
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)

标签:name,python,self,面向对象,jack,私有,print,balance,属性
来源: https://www.cnblogs.com/weiyangchen/p/15550544.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有