美文网首页呆鸟的Python数据分析
python进阶-特殊变量和属性

python进阶-特殊变量和属性

作者: Liburro | 来源:发表于2018-07-25 12:36 被阅读37次

本文主要记录了python中一些特殊变量或者属性的说明,比如__all__等。

__all__

先看代码,假设有两个py文件,

test.py

import re

def f():
    print('test:f')

def f1():
    print('test:f1')

test1.py

from test import *

f()
f1()
print(re.findall('\d', '123'))

运行test1.py是不会报错的,但是我们看见我们用了re模块,test1.py里面却没有使用import re引入,为什么呢,因为我们在import test的时候,test.py里面引入了re,所以我们在这里也可以使用。另外,如果我在test.py里面定义的某些内容,不想其它模块使用,比如这里f1这个函数,我只想别人用我的f函数,f1不能使用,那么__all__变量就可以解决这个问题。

当我们修改test.py为如下格式后:

import re

__all__ = [
    'f'
]

def f():
    print('test:f')

def f1():
    print('test:f1')

test1.py就只能使用f函数了,ref1都是不能使用的。

注意:__all__只针对import *这种格式有效,如果要访问f1或者re,其它模块仍然可以使用test.f1或者test.re这种限定访问符的方式来访问。

__name__

The name of the class, function, method, descriptor, or generator instance.

__main__

如果模块在被直接执行的时候__name__就等于__main__,如果是被导入__name__就等于模块的文件名

__dict__

A dictionary or other mapping object used to store an object’s (writable) attributes.

就是一个字典,存储了对应对象的属性。

__slots__

它是一个列表,是一个类属性,如果设置了这个属性,那么__dict__就无效了,只有定义在__slots__列表里面的属性才可以进行获取或者配置,使用这个属性,我们可以防止用户随意产生属性,比如:

class A(object):
    def __init__(self):
        self.a = 1

上面没有使用__slots__,那么用户可以做下面的操作:

x = A()
x.a = 2
x.b = 1 #这个是用户自己加入的

如果类的定义增加了__slots__,我们可以防止用户访问或者设置不应该有的属性:

class A(object):
    __slots__ = ['a']
    def __init__(self):
        self.a = 1

那么用户在用x.b = 1的时候会抛出异常AttributeError: 'A' object has no attribute 'b'

注意:这个属性,只是针对类的实例有效,如果直接对类设置了一个不在__slots__里面的属性,这个属性可以设置成功,而且类的实例也可以访问,比如:

class A(object):
    __slots__ = ['a']
    def __init__(self):
        self.a = 1

A.b = 2
x = A()
print(x.b)

我们虽然限定了__slots__ = ['a'],但是我们对A.b = 2,那么下面的print仍然可以打印出结果,而且不会报错。

相关文章

  • python进阶-特殊变量和属性

    本文主要记录了python中一些特殊变量或者属性的说明,比如__all__等。 __all__ 先看代码,假设有两...

  • python下划线定义属性

    类的私有变量和私有方法 在Python中可以通过在属性变量名前加上双下划线定义属性为私有属性 特殊变量命名 1、 ...

  • 三、Python函数基础

    字符串进阶 格式化输出 列表进阶 函数 变量的作用域和global变量 lambda匿名函数 python 使用 ...

  • python @property

    参考 Python进阶之“属性(property)”详解 - Python - 伯乐在线

  • Python实例变量和类变量

    Python实例变量和类变量 类变量(类属性): 类变量属于类所有,所有实例共享一个变量 实例变量(实例属性) 实...

  • 一个Java 程序员的python学习之路9- __getite

    python中的和下划线有关的几种特殊方法 Python 中会用到下划线作为变量前缀和后缀指定特殊变量和方法,其中...

  • Hencoder学习笔记1-7

    【HenCoder Android 开发进阶】自定义 View 1-7:属性动画(进阶篇) 针对特殊类型的属性来做...

  • Python第三周

    面向对象的进阶 包装器:@property(getter)、@setter 之前我们讨论过Python中属性和方法...

  • python学习日记四(安装Django)

    一.下载Python和Django 二.配置环境变量我的电脑---》属性--》高级---》环境变量--》Path ...

  • 2018-06-28 python 类的私有变量和私有方法

    转发python 类的私有变量和私有方法 类的私有变量和私有方法在Python中可以通过在属性变量名前加上双下划线...

网友评论

    本文标题:python进阶-特殊变量和属性

    本文链接:https://www.haomeiwen.com/subject/zilemftx.html