• 08.07面向对象


    访问可见性

    • 私有变量,变量名前面加"__"
    • 私有不可继承,不可在外部调用,但可以在内部调用。
    • 如果非要使用私有变量,那么可以使用dir(class())去查看它真正的名字。
    • 私有变量/函数,在类内部可以直接调用。
    • 如果你想体现一个变量/函数特别重要你可以使用"_"
    #私有
    class
    A(object): def __init__(self): self.__a=1000 self.__b=100 def __B(self): print(self.__a) self.c() def __c(self): print(self.__a) A_=A() print(A_._A__a)
    • 例:私密空间

    class squre(object):
        def __init__(self):
            self._mi="藏起来,不给看,想看输密码"  
        @property
        def mi(self):
            return self._mi
        @mi.setter
        def mi(self,str_):
            self._mi=str_
    def look():
        s=squre()
        print(s.mi)
    def change(password,str_):
        if password =='2323213':
            s=squre()
            s.mi=str_
            print(s.mi)
        else:
            print('密码错误')
    
    change('2323213','hhhhh')

    @property装饰器and@.setter装饰器

    使用装饰器的时候,需要注意:

    1. 装饰器名,函数名需要一致.
    2. property需要先声明,再写setter,顺序不能倒过来
    3.  如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
    4. 如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器.
    #装饰器的使用
    class
    Name(object): def __init__(self,a,b): self.__a=a self.__b=b @property def A (self): print(self.__a) name=Name(00,200) name.A
    #修改器的使用
    class Name(object):
        def __init__(self,a,b):
            self.__a=a
            self._b=b
        @property
        def A(self):
            print(self.__a)
        @A.setter
       def A(self,a1):
        self.__a=a1
       def play(self):
        print(self.__a)
        print(self.__b)
    name=Name(100,200)
    name.A=1000
    name.play()
    • 例子:输入三个数字(私有),求三个数字的和,尝试更改其中两个数字
    class A(object):
        def __init__(self,a,b,c):
            self.__a=a
            self.__b=b
            self.__c=c
        @property
        def B(self):
            print(self.__a)
        @B.setter
        def B(self,num):
            self.__a=num
        def sum(self):
            print(self.__a+self.__b+self.__c)
    a=A(12,1,4)
    a.B=99
    a.sum() 

    在python中类是动态的。

    class Num(object):
        def __init__(self):
            self.a = 1000
        
        def A(self):
            print(self.b)
    
    
    num = Num()
    num.b =1000000
    # print(num.a)
    print(num.b)
    num.A()

    __slots__魔法

           我们讲到这里,不知道大家是否已经意识到,Python是一门动态语言。通常,动态语言允许我们在程序运行时给对象绑定新的属性或方法,当然也可以对已经绑定的属性和方法进行解绑定。但是如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定。需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。

    class Person(object):
        #限定Person对象只能绑定_name,_age和——gender属性
        __slots__ = ('_name','_age','_gender')
        def __init__(self,name,age):
            self.__name=name
            self.__age=age
  • 相关阅读:
    【webrtc】PTCPeerConnection(28)
    windows传文件到linux服务器--- secureCRT PK xftp
    Navicat premium查看数据库表中文注释的两种方式
    Jmeter 5.1实现图片上传接口测试
    查看服务器内存、CPU、网络等占用情况的命令--汇总
    AWS服务器上安全组端口设置和访问的问题
    linux服务器时间乱码问题解决
    连接linux的几款工具 简介
    服务器上build.xml文件乱码解决(亲测有效)
    jmeter通过ant执行时报错 jmeter.log not found
  • 原文地址:https://www.cnblogs.com/lxq0727/p/11315756.html
Copyright © 2020-2023  润新知