Python之类的成员

  

一、私有变量和私有方法

  

私有属性分为两类分别是对象的私有变量以及类的静态私有变量,除了变量外,还有私有方法;在类中,所有私有的属性和方法都是在变量的左边加上双下划线的方式定义,所有的私有变量和私有方法都不能在类的外部使用

  
 <代码>类人():
  __pwd=" 123456 " #私有静态变量
  
  def __init__(自我、名称、价格):
  self.name=名字
  自我。__price=价格#私有变量
  
  #私有方法
  def __add_price(自我):
  返回self.__price * 2
  
  eric=人(eric, 20000000)
  #私有变量和方法无法在外部调用,虽然可以通过_类名__属性名方式调用私有变量,但不提倡使用
  打印(eric._Person__price)
  打印(eric._Person__pwd)
  print (eric._Person__add_price())  
  
 <代码> 20000000
  123456
  40000000  
  

二、类的属性

  

python的属性其实是普通方法的变种
有两种定义方式:
1,普通方法加上财产装饰器
2,在类中定义值为财产对象的静态字段

  

属性装饰器方式

  

属性是一种特殊的属性,当我们访问被财产装饰的函数时,执行函数内的代码,得到返回值。

  
 <代码>从数学进口π
  
  类圆():
  def __init__(自我,半径):
  自我。半径为半径
  
  @ property
  def周长(自我):
  2π* * self.radius返回
  
  @ property
  def区域(自我):
  返回self.radius * * 2 *π
  
  c1=圆(5)
  
  #未带装饰器调用方法
  #打印(c1.area ())
  
  #带装饰器时当成属性调用
  打印(c1.area)  
  

使用财产装饰器定义属性时,要注意被财产装饰的普通方法只能有自我一个参数,并且在调用时不需要加()。

  

在python3之后,所有的类默认继承了对象,所以说,所有的类都是新式类,新式类的属性有三种访问方式,并分别对应了三个被@ property @方法名这里,@方法名delete修饰的方法

  
 <代码>类产品(对象):
  
  def __init__(自我):
  #原价
  自我。original_price=100
  #折扣
  自我。折扣=0.8
  
  @ property
  def价格(自我):
  #实际价格=原价*折扣
  new_price=自我。original_price * self.discount
  返回new_price
  
  @price.setter
  def价格(自我价值):
  自我。original_price=值
  
  @price.deleter
  def价格(自我):
  德尔self.original_price
  
  obj=货物()
  打印(obj.price) #获取商品价格
  obj。价格=200 #修改商品原价
  德尔obj。价格#删除商品原价
   
  

静态字段方式

  

静态字段方式没有新式类和经典类的区别;静态字段定义方式也有三种访问方式:分别对应了三个被@ property @方法名这里,@方法名delete修饰的方法

  
 <代码>类人():
  def __init__(自我、名称):
  自我。__name=名字
  
  def get_name(自我):
  返回self.__name
  
  def set_name(自我,新名称):
  自我。__name=新名称
  
  def del_name(自我):
  德尔self.__name
  
  NAME=属性(get_name set_name del_name) #定义财产静态字段
  
  obj=人(eric)
  
  打印(obj.NAME) #调用get_name方法
  obj。NAME=" 111 " #调用set_name方法
  德尔的人。名字#调用del_name方法 
  

三、类的方法

  

方法包括:普通方法,静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

  
 <代码>普通方法:由对象调用,至少一个自我参数,执行普通方法时,自动将调用该方法的对象赋值给自我;
  类方法:由类调用,至少一个cls参数,执行类方法时,自动将调用该方法的类复制给cls;
  静态方法:由类调用;无默认参数; 
  
 <代码>类商品():
  __discount=0.8
  def __init__(自我、名称、价格):
  self.name=名字
  自我。__price=价格
  
  def价格(自我):#普通方法
  返回self.__price * Goods.__discount
  
  @classmethod
  new_discount def change_discount (cls): #类方法
  cls。__discount=new_discount
  
  @staticmethod
  def get_user_pwd(): #静态方法
  用户输入=(“请输入用户名:”)
  pwd=输入('请输入pwd: ')
  
  苹果=货物(“苹果”,10)
  Goods.change_discount(0.9) #类方法调用
  Goods.get_user_pwd() #静态方法调用
   
  

Python之类的成员