面向对象进阶

私有变量

__a:私有变量,在变量名称前加上“__”

约定:在变量前加上一个下划线“_”,表示很重要(私有),不要乱动

例:

 

class A(object):
    def __init__(self):
        #私有:在变量名称前加上‘— —’
        #私有 不可继承,不可再外部调用
        #但是可以在内部调用
        self.__a = 1000
    def B(self):
        print(self.__a)
A_ = A()
#print(A_.__a) 不可调用
print(A_.B())  #可调用    None是因为没有return

 

例:写一个注册页面

1.使用邮箱注册

2.使用密码,两次输入的密码要相等

 

class zhuce(object):
    def youxiang(self):
        email = input('请选择邮箱注册:')
        print(email)
    def mima(self):
        self.mima=input("请输入6位密码:")
        
        if len(self.mima)!= 6:
           
            self.mima()
    def zcmm(self):
        pass_1=input("再次输入密码")
        if self.mima==pass_1:
            print("密码确认成功")
        else:
            print("两次输入密码不一致,请重新输入")
            self.zcmm()
    
y=zhuce()
y.youxiang()
y.mima()
y.zcmm()

 

@proprety装饰器

 

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

例:输入三个数字(私有),求三个数字的和,尝试更改其中两个数字

class Name(object):
    def __init__(self,a,b,c):
        self.__a = a
        self.__b = b
        self.__c = c
    @property  #访问器
    def a(self):  
        print(self.__a)
    @a.setter  #修改器
    def a(self,d):
        self.__a = d    
            
    def add(self):
        add = self.__a + self.__b + self.__c
        print(add)
        
name = Name(10,2,5)
name.a=12  #可修改
name.add()

注:在Python中类是动态的

__slots__魔法

需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。

class Person(object):

    # 限定Person对象只能绑定_name, _age和_gender属性
    __slots__ = ('_name', '_age', '_gender')

 

转载于:https://www.cnblogs.com/cy123456/p/11315996.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值