面对对象进阶

 

访问可见性问题

 

在很多面向对象编程语言中,我们通常会将对象的属性设置为私有的(private)或受保护的(protected),简单的说就是不允许外界访问,而对象的方法通常都是公开的(public),因为公开的方法就是对象能够接受的消息。在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头,下面的代码可以验证这一点。

# 私有变量,变量名前面加"__"
# 如果非要使用私有变量,那么可以使用dir(class())去查看它真正的名字.
# 私有变量/函数,在类内部可以直接调用.
# 如果你想体现一个变量/函数特别重要你可以使用"_"

 

案例一:

案例二:

import numpy as np
class zhuce(object):
  def __init__(self):
    pass
  def youxiang(self):
    print('使用邮箱注册')
    yx = input('输入')
    print(yx)
    self.yx=yx
  def password(self):
    print('请输入密码')
    pw = input('输入')
    print(pw)
    self.pw=pw
    print('确认密码')
    qpw = input('输入')
    print(qpw)
    self.qpw=qpw
  def yanzheng(self):
    if self.pw == self.qpw:
      print('密码设置成功')
    else:
      print('两次输入密码不一致')
  def yzm(self):
    import random
    a=random.randrange(1000,9999)
    print(a)
    self.a = a
    sr = input('输入')
    self.sr = sr
  def shuru(self):
    if self.sr == int(self.a):
      print('验证码正确')
    else:
      print('请重新输入')
zc = zhuce()
zc.youxiang()
zc.password()
zc.yanzheng() 
zc.yzm()
zc.shuru()
 

@property装饰器

之前我们讨论过Python中属性和方法访问权限的问题,虽然我们不建议将属性设置为私有的,但是如果直接将属性暴露给外界也是有问题的,比如我们没有办法检查赋给属性的值是否有效。我们之前的建议是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便

# 使用装饰器的时候,需要注意:
# 1. 装饰器名,函数名需要一致.
# 2. property需要先声明,再写setter,顺序不能倒过来
# 3. 如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
# 4. 如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器.

案例三

 

 

转载于:https://www.cnblogs.com/caoliyuan/p/11316025.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值