• python 02


    
    

    """

    在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头。

    如果非要使用私有变量,那么可以使用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)
    print(A_.B())
    print(dir(A_)) # 查看该实例所有的方法和属性

    @property装饰器

    之前我们讨论过Python中属性和方法访问权限的问题,我们不建议将属性设置为私有的,而是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作,这是就考虑使用@property包装器来包装getter和setter方法。
    使用装饰器的时候,需要注意:
    1.装饰器名、函数名需一致
    2.property需要先声明,再写setter,顺序不能倒过来
    3.如果某个变量只允许被访问不允许被修改,就可以使用访问器@property
    4.如果需要修改访问器中的变量,可以搭建一个修改器,或者删除访问器
    例子:
    # 输入三个数字(私有),求三个数字的和,尝试更改其中两个数字
    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 __ini__(self):
            self.a = 1000
        
        def A(self):
            print(self.b)
            
    num = Num()
    num.b =100000
    #print(num.a)
    print(num.b)
    num.A()

    slots魔法

    在类中定义__slots___变量来限定自定义类型的对象只能绑定某些属性
    需要注意的是\_\_slots\_\_的限定只对当前类的对象生效,对子类并不起任何作用   
    class Num(object):
        __slots__ = ('a','b')
        def __init__(self):
            self.a = 1000
            
    num = Num()
    num.b = 10000
    print(num.b)
    num.c = 123
    print(num.c)
  • 相关阅读:
    CentOS 6.9/7通过yum安装指定版本的Nginx
    Ubuntu 16.04安装uafred用于替代Alfred
    Alfred修改内置Terminal为iTerm
    CentOS 6.9下的iptables在本机用DNAT转发指定IP到内网IP无效的问题解决(127.0.0.1)
    Java在Service层异常封装
    Chrome无法播放m3u8格式的直播视频流的问题解决
    Caused by: java.net.UnknownHostException: localhost.localdomain: localhost.localdomain的问题解决
    macOS High Sierra 10.13正式版USB安装盘制作
    Maven打包排除某个资源或者目录
    mybatis实现变量定义,实现sql业务代码
  • 原文地址:https://www.cnblogs.com/lyc0303/p/11322041.html
Copyright © 2020-2023  润新知