Python私有函数,python调用私有方法

  Python私有函数,python调用私有方法

  私有函数和私有变量中的私有意味着拥有,不公开,不共享。放入函数和变量的是自己的函数和变量,没有公开。本文将通过实例详细讲解Python中的私有函数、私有变量和封装。有兴趣的可以学习一下。

  

目录
什么是私有函数和私有变量?私有函数和私有变量的定义方法?用Python打包面向对象编程练习。通过学习私有函数和私有变量,我们可以更好地改进类的开发,从而丰富我们的场景和实现方案。

  

什么是私有函数和私有变量

  私有函数和私有变量是什么意思?—简单的理解就是独自拥有,不公开,不分享。放入函数和变量的是自己的函数和变量,没有公开。这样我们就明白了什么是私有函数和私有变量。

  虽然类中不能被实例化对象调用的函数和变量不能被实例化对象调用,但是我们可以调用类内的私有函数和变量。私有函数和变量的目的是我们只想调用类内的业务,而不想被实例化的对象调用。既然有私有函数和变量,那么实例化对象可以调用的函数和变量其实就是公共函数和公共变量,但一般我们称之为函数和变量。

  

私有函数与私有变量的定义方法

  如何定义私有函数和私有变量:在类变量和类函数前加_ _(两条下横线)定义私有函数和私有变量;不需要添加变量或函数,左右有两条较低的水平线,是类的内置函数的定义规范。

  私有函数和私有变量的示例如下:

  类别人员(对象):

  def __init__(self):

  self.name=name

  自我。__age=18 # 自己。“__age”是persistence类的私有变量。

  定义运行(自身):

  打印(自我.姓名,自我。__age) #在持久性类的代码块中,私有变量仍然可以被调用

  DEF _ _ EAT (self) 3360 # _ _ EAT (self)是Persion类的私有函数。

  还‘我想吃点水果’

  接下来我们会根据上面的示例代码做一些修改,更好的演示私有函数和私有变量,加深理解。

  类别PersionInfo(对象):

  def __init__(self,name):

  self.name=name

  def eat(自身):

  结果=自己。_ _吃()

  打印(结果)

  def __eat(self):

  返回“{self。name}最喜欢的水果是“榴莲”和“番石榴”。

  定义运行(自身):

  结果=自己。_ _运行()

  打印(结果)

  def __run(self):

  返回“{self。name}最喜欢的健身方式是“跑步”和“游泳”。

  persion=PersionInfo(name=Neo )

  persion.eat()

  persion.run()

  #执行结果如下:

  #尼奥最喜欢的水果是“榴莲”和“番石榴”

  # Neo最喜欢的健身方法是“跑步”和“游泳”

  让我们尝试通过实例化对象持久性来调用__eat私有函数。

  类别PersionInfo(对象):

  def __init__(self,name):

  self.name=name

  def eat(自身):

  结果=自己。_ _吃()

  打印(结果)

  def __eat(self):

  返回“{self。name}最喜欢的水果是“榴莲”和“番石榴”。

  def run(self):

   result = self.__run()

   print(result)

   def __run(self):

   return f{self.name} 最喜欢的健身方式是 \跑步\ 和 \游泳\

  persion = PersionInfo(name=Neo)

  persion.__eat()

  # >>> 执行结果如下:

  # >>> AttributeError: PersionInfo object has no attribute __eat

  # >>> 再一次证明 实例化对象是不可以调用私有函数的

  

  那么事实真的是 实例化对象就没有办法调用 私有函数 了么?其实不是的,我们继续往下看

  

class PersionInfo(object):

   def __init__(self, name):

   self.name = name

   def eat(self):

   result = self.__eat()

   print(result)

   def __eat(self):

   return f{self.name} 最喜欢吃水果是 \榴莲\ 和 \番石榴\

   def run(self):

   result = self.__run()

   print(result)

   def __run(self):

   return f{self.name} 最喜欢的健身方式是 \跑步\ 和 \游泳\

  persion = PersionInfo(name=Neo)

  # 通过 dir() 函数 查看一下 实例化对象 persion 中都有哪些函数?

  print(dir(persion))

  

  

  可以看到 实例化对象 persion 也有两个私有变量 _Persion__eat 和 _Persion__run ,尝试直接用实例化对象 persion 调用私有变量。

  

class PersionInfo(object):

   def __init__(self, name):

   self.name = name

   def eat(self):

   result = self.__eat()

   print(result)

   def __eat(self):

   return f{self.name} 最喜欢吃水果是 \榴莲\ 和 \番石榴\

   def run(self):

   result = self.__run()

   print(result)

   def __run(self):

   return f{self.name} 最喜欢的健身方式是 \跑步\ 和 \游泳\

  persion = PersionInfo(name=Neo)

  # 通过 dir() 函数 查看一下 实例化对象 persion 中都有哪些函数?

  print(dir(persion))

  print(persion._PersionInfo__eat())

  print(persion._PersionInfo__run())

  # >>> 执行结果如下图:

  

  

  可以看到通过这种方式,我们的 实例化对象 persion 也成功的调用了 PersionInfo 类 的私有函数;但是既然是 私有函数 ,那么目的就是不希望被实例化对象调用,所以我们还是按照编码规范来使用比较好。

  附:私有变量(私有属性)的使用与私有函数一样,我们看下面的示例

  

class PersionInfo(object):

   __car = BMW

   def __init__(self, name, sex):

   self.name = name

   self.__sex = sex

   def info(self):

   result = self.__info()

   print(result)

   def __info(self):

   return f{self.name} 性别:{self.__sex} ,他有一辆:\{self.__car}\

  persion = PersionInfo(name=Neo, sex=男)

  persion.info()

  # >>> 执行结果如下:

  # >>> Neo 性别:男 ,他有一辆:BMW

  # >>> 尝试调用私有函数 私有函数与变量(属性)[_PersionInfo_01__car, _PersionInfo_01__info, _PersionInfo_01__sex]

  print(persion01._PersionInfo_01__info())

  # >>> 执行结果如下:

  # >>> Neo 性别:男 ,他有一辆:BMW

  

  

  

Python 中的封装

  其实 Python 中并没有 封装 这个功能,而封装只是针对 Python 中某种业务场景的一种概念而已。

  封装的概念 —> 将不对外的私有属性或方法通过可以对外使用的函数而使用(类中定义的私有函数、私有方法只能在类的内部使用,外部无法访问),这样做的主要原因是:保护隐私,明确的区分内与外。

  封装的示例如下:

  

class Persion(object):

   def __hello(self, data):

   print(hello %s % data)

   def helloworld(self):

   self.__hello(world)

  if __name__ == __main__

   persion = Persion()

   persion.helloworld()

  # >>> 执行结果如下:

  # >>> hello world

  # >>> 我们可以看到 helloworld() 是基于 私有函数 __hello() 来执行的;

  # >>> 所以我们是通过对外的函数 helloworld() 调用了内部私有函数 __hello ; 这就是 Python 中的 封装的概念。

  

  

  

面向对象编程小练习

  需求:

  用类和对象实现银行账户的资金交易管理,包括存款、取款和打印交易详情,交易详情中包含每次交易的时间、存款或者取款的金额、每次交易后的余额。

  脚本示例如下:

  

#coding: utf-8

  import time

  class MoneyExchange(object):

   money = 0

   abstract = []

   single_bill_list = []

   bill_list =[]

   transcation_num = 0

   currency_type = "人民币"

   service_option_num = []

   service_option = []

   service_menu ={

   1: "1:存款",

   2: "2:取款",

   3: "3:查看明细",

   4: "4:查看余额",

   0: "0:退出系统"

   }

   for key, value in service_menu.items():

   service_option_num.append(key)

   service_option.append(value)

   def welcome_menu(self):

   print(* * 20 + 欢迎使用资金交易管理系统 + * * 20)

   for i in range(0,len(self.service_option)):

   print(self.service_option[i])

   print(* * 60)

   def save_money(self):

   self.money_to_be_save = float(input(请输入存钱金额:))

   self.abstract = 转入

   self.time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

   self.money += self.money_to_be_save

   self.single_bill_list.append(self.time)

   self.single_bill_list.append(self.abstract)

   self.single_bill_list.append(self.money_to_be_save)

   self.single_bill_list.append(self.currency_type)

   self.single_bill_list.append(self.money)

   self.bill_list.append(self.single_bill_list)

   self.single_bill_list = []

   self.transcation_num += 1

   print(已成功存入!当前余额为:%s 元 % self.money)

   input(请点击任意键以继续...)

   def withdraw_money(self):

   self.money_to_be_withdraw = float(input(请输入取出金额:))

   if self.money_to_be_withdraw <= self.money:

   self.abstract = 取出

   self.time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

   self.money -= self.money_to_be_withdraw

   self.single_bill_list.append(self.time)

   self.single_bill_list.append(self.abstract)

   self.single_bill_list.append(self.money_to_be_withdraw)

   self.single_bill_list.append(self.currency_type)

   self.single_bill_list.append(self.money)

   self.bill_list.append(self.single_bill_list)

   self.single_bill_list = []

   self.transcation_num += 1

   print(已成功取出!当前余额为:%s 元 % self.money)

   input(请点击任意键以继续...)

   else:

   print(您输入的取出金额超过余额,无法操作!请重新输入)

   input(请点击任意键以继续...)

   def check_bill_list(self):

   print( 交易日期 摘要 金额 币种 余额 )

   for i in range(0, self.transcation_num):

   print("%s %s %s %s %s" % (

   self.bill_list[i][0],

   self.bill_list[i][1],

   self.bill_list[i][2],

   self.bill_list[i][3],

   self.bill_list[i][4]

   ))

   input(请点击任意键以继续...)

   def check_money(self):

   print(账户余额为:%s元 % self.money)

   input(请点击任意键以继续...)

   def user_input(self):

   option = float(input(请输入选项:))

   if option in self.service_option_num:

   if option == 1:

   self.save_money()

   if option == 2:

   self.withdraw_money()

   if option == 3:

   self.check_bill_list()

   if option == 4:

   self.check_money()

   if option == 0:

   print(您已成功退出,谢谢!)

   exit()

   else:

   print(抱歉,你输入有误,请重新输入!)

   input(请点击任意键以继续...)

  money_exchange = MoneyExchange()

  while True:

   money_exchange.welcome_menu()

   money_exchange.user_input()

  # >>> 执行结果如下:

  # >>> ********************欢迎使用资金交易管理系统********************

  # >>> 1:申请存款

  # >>> 2:申请取款

  # >>> 3:查看明细

  # >>> 4:查看余额

  # >>> 0:退出系统

  # >>> ************************************************************

  # >>> 根据提示执行对应的操作

  

  PS:这个脚本并不完善,但是太晚了不想改了。

  以上就是Python学习之私有函数,私有变量及封装详解的详细内容,更多关于Python私有函数 变量 封装的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: