python的单下划线和双下划线
python 类中的单下划线开头的变量表示:该方法为类的私有方法,原则上外部不能访问,但是用._XX是可以访问到的
双下划线开头则是强制外部不能直接访问的用.__XX是访问不到的,它内部其实是将变量名重新命名为:_类名__变量名,所以可以通过._类名__变量名访问
#_*_coding:utf-8_*_
__author__ = 'Linhaifeng' class People:
__star='earth111111111111'
__star1='earth111111111111'
__star2='earth111111111111'
__star3='earth111111111111'
def __init__(self,id,name,age,salary):
print('----->',self.__star)
self.id=id
self.name=name
self.age=age
self.salary=salary def get_id(self):
print('我是私有方法啊,我找到的id是[%s]' %self.id) #访问函数
def get_star(self):
print(self.__star) p1=People('','alex','',100000000)
# print(p1.__star)
print(People.__dict__)
# print(p1.__star)
print(p1._People__star)
#
# p1.get_star()
p1.get_star()
双下划线开头的attr方法
# class Foo:
# x=1
# def __init__(self,y):
# self.y=y
#
# def __getattr__(self, item):
# print('执行__getattr__')
#
# f1=Foo(10)
# print(f1.y)
# print(getattr(f1,'y')) #len(str)--->str.__len__()
# f1.sssssssssssssssssssssssssssssssssssss # class Foo:
# x=1
# def __init__(self,y):
# self.y=y
#
# def __delattr__(self, item):
# print('删除操作__delattr__')
#
# f1=Foo(10)
# del f1.y
# del f1.x #
# class Foo:
# x=1
# def __init__(self,y):
# self.y=y
#
# def __setattr__(self, key, value):
# print('__setattr__执行')
# # self.key=value
# self.__dict__[key]=value
# f1=Foo(10)
# print(f1.__dict__)
# f1.z=2
# print(f1.__dict__)
# class Foo:
# def __getattr__(self, item):
# print('------------->')
#
# # print(Foo.__dict__)
# print(dir(Foo))
# f1=Foo()
#
# print(f1.x) #只有在属性不存在时,会自动触发__getattr__
#
# del f1.x #删除属性时会触发_delattr__
#
# f1.y=10
# f1.x=3 # 设置属性的时候会触发——setattr——— class Foo:
def __init__(self,name):
self.name=name
def __getattr__(self, item):
print('你找的属性【%s】不存在' %item)
def __setattr__(self, k,v):
print('执行setattr',k,v)
if type(v) is str:
print('开始设置')
# self.k=v #触发__setattr__
self.__dict__[k]=v.upper()
else:
print('必须是字符串类型')
def __delattr__(self, item):
print('不允许删除属性【%s】' %item)
# print('执行delattr',item)
# del self.item
# self.__dict__.pop(item) f1=Foo('alex')
# f1.age=18 #触发__setattr__
# print(f1.__dict__)
# print(f1.name)
# print(f1.age)
# print(f1.gender)
# print(f1.slary)
print(f1.__dict__)
del f1.name
print(f1.__dict__)
python的单下划线和双下划线的更多相关文章
- python 里面的单下划线与双下划线的区别
python 里面的单下划线与双下划线的区别 Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __ ...
- Python里的单下划线,双下划线,以及前后都带下划线的意义
Python里的单下划线,双下划线,以及前后都带下划线的意义: 单下划线如:_name 意思是:不能通过from modules import * 导入,如需导入需要:from modules imp ...
- python单下划线、双下划线、头尾双下划线说明:
单下划线.双下划线.头尾双下划线说明: __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的. _foo: 以单下划线开头的表示的是 protected 类 ...
- 测试Python类成员的单下划线,双下划线,两头下划线的区别
首先原谅一个菜鸟叫他“两头下划线”.记得在windows编程中,很多宏定义使用下划线+大写,给人逼格很高的错觉.对于Python下划线的认识,大概是从__dict__这个属性开始的,看__dict__ ...
- Python笔记_第三篇_面向对象_4.单下划线和双下划线
说道这里我们需要稍微暂停一下.前面我们说到了类是作为一个对象存放容器.这个容器里面有属性和方法.最好的理解类的方式就是把类想想成一个容器. 然后构造了一个析构函数和构造函数,然后又对object和se ...
- python(七) Python中单下划线和双下划线
Python中单下划线和双下划线: 一.分类 (1).以单下划线开头,表示这是一个保护成员,只有类对象和子类对象自己能访问到这些变量. 以单下划线开头的变量和函数被默认是内部函数,使用from mod ...
- python中的单下划线和双下划线意义和作用
Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数).例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以 ...
- python单下划线与双下划线的区别
Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划 ...
- python类中方法加单下划线、双下划线、前后双下滑线的区别
首先看一段代码: class Foo(): def __init__(self): print "__init__ method" def public_method(self): ...
- 【python】单下划线与双下划线的区别
Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 以单下划线开头(_f ...
随机推荐
- day38 并发编程(理论)
目录 一.操作系统发展史 二.多道技术 1 单核实现并发的效果 2 多道技术图解 3 多道技术重点 三.进程理论 1 必备知识点 2 进程调度 3 进程的三状态 4 两对重要概念 四.开启进程的两种方 ...
- MCU 51-1概述
Microcontroller Unit 单片机:将微处理器CPU.存储器(RAM.ROM) .基本输入/输出(I/O) 接口电路和总线接口等组装在一块主机板(即微机主板). 微型计算机:将微处理器C ...
- scala 数据结构(九):-filter、化简
1 filter filter:将符合要求的数据(筛选)放置到新的集合中 应用案例:将 val names = List("Alice", "Bob", &qu ...
- java 基础(二) 搭建Java编译环境(linux系统)
jdk安装配置 首先下载JDK和JRE,这里你的需要看看你的Linux系统是多少位的,比如我的是64位的:下载JDK并指定到Download目录,JRE同样操作:解压并且配置环境: tar -zxvf ...
- How to install nginx in Ubuntu
The steps for installing the nginx on Ubuntu below. 1.install the packages first. apt-get install gc ...
- 基于three.js的全景
直接上代码: <!DOCTYPE html><html> <head> <title>three.js css3d - panorama</tit ...
- 【学习记录】C#保存数据至CSV文档 & DateTime格式模式控制解释
数据类的定义: public class Result_Display { private string id; public string ID { get { return id; } set { ...
- echarts 踩坑 : 为什么效果出不来?看看有没有正确引入
今天我要给 echarts 组件加个 dataZoom 功能,结果发现没有效果. 后来发现是引入 echarts 模块的问题. 如果是按需引入的话,必须引入相应的功能模块才能使用相应的功能. 举例: ...
- layui 魔改:上传时的真实进度条
这个问题本身不复杂,难点在于需要改 layui 的源码. HTML略. 网页的JS域: layui.use(['upload','element','layer'], function(){ var ...
- IDM的“免费版”NDM免费的下载工具
软件截图 软件介绍 免费小巧的多线程下载工具,支持断点续传,支持浏览器扩展,嗅探下载音视频文件. 和IDM差不多,只不过是免费的 下载软件 Win 我提供的UCloud-OSS 官网下载 Mac 我提 ...