类的内置方法__attr__介绍
1、hasattr getaddr setaddr delattr 这四个函数同样也适用于类
class BlackMedium:
feture="Ugly"
def __init__(self,name,addr):
self.name=name
self.addr=addr
def sell_house(self):
print("%s 正在卖房子,傻逼才买呢" %self.name)
def rent_house(self):
print("%s 正在租房子,傻逼才租呢" % self.name)
print(hasattr(BlackMedium,"feture")) C:\python35\python3.exe D:/pyproject/day26/反射.py True
2、双下划线开头的attr方法(__开头的都是内置的方法)
__getattr__
class Foo:
x=1
def __init__(self,y):
self.y=y
def __getattr__(self, item):
print("执行__getattr__")
f1=Foo(10)
print(f1.y)
f1.ssss#当实例调用的方法不存在时候才会执行__getattr C:\python35\python3.exe D:/pyproject/day26/双下划线开头的attr方法.py 10 执行__getattr__
__delattr__
class Foo:
x=1
def __init__(self,y):
self.y=y
def __delattr__(self, item):
print("删除操作---->")
f1=Foo(10)
del f1.y#删除实例中的y 会触发__delattr__
del f1.x #删除类中的x 会触发__delattr__ C:\python35\python3.exe D:/pyproject/day26/双下划线开头的attr方法.py 删除操作----> 删除操作---->
__setattr__只要设置一次值,就会触发一次它
class Foo:
x=1
def __init__(self,y):
self.y=y
def __setattr__(self, key, value):
print("__setattr__执行")
self.__dict__[key]=value
f1=Foo(10)
print(f1.__dict__)
f1.z=2
print(f1.__dict__) C:\python35\python3.exe D:/pyproject/day26/双下划线开头的attr方法.py __setattr__执行 {'y': 10} __setattr__执行 {'y': 10, 'z': 2}
3、如果调用的属性不存在,我们自己又没有定义__getattr的话,就会调用系统默认的
class Foo:
pass
f1=Foo()
print(f1.xxx)#只有在属性不存在的时候,会自动触发__getattr__ AttributeError: 'Foo' object has no attribute 'xxx'
我们自己定义一个__getattr__,就会用我们自己的定义的这个
class Foo:
def __getattr__(self, item):
print("---->")
f1=Foo()
print(f1.xxx)#只有在属性不存在的时候,会自动触发__getattr__ C:\python35\python3.exe D:/pyproject/day26/双下划线开头的attr方法.py ----> None
注意:
这__getattr__ __setattr__ __delattr__这三个只有实例化之后,实例调用的时候才会触发,跟类没有关系
类的内置方法__attr__介绍的更多相关文章
- 第8.14节 Python类中内置方法__str__详解
一. object类内置方法__str__和函数str 类的内置方法__str__和内置函数str实际上实现的是同一功能,实际上str调用的就是__str__方法,只是调用方式不同,二者的调用语法如下 ...
- 第8.13节 Python类中内置方法__repr__详解
当我们在交互环境下输入对象时会直接显示对象的信息,交互环境下输入print(对象)或代码中print(对象)也会输出对象的信息,这些输出信息与两个内置方法:__str__方法和__repr__方法有关 ...
- day28 面向对象:反射,内置函数,类的内置方法
面向对象进阶博客地址链接: http://www.cnblogs.com/Eva-J/articles/7351812.html 复习昨日内容: # 包 # 开发规范 # # hashlib # 登录 ...
- python学习之老男孩python全栈第九期_day027知识点总结——反射、类的内置方法
一. 反射 ''' # isinstance class A:pass class B(A):pass a = A() print(isinstance(a,A)) # 判断对象和类的关系 print ...
- Python进阶-XVIV 类的内置方法:__str__ 、__repr__、析构函数(__del__)、双下的call,eq,new,hash 以及item相关的三个方法
类的内置方法 它与内置函数有紧密的联系,有的内置函数就是调用的内置方法. 在顶级父类obj中有: 两个双下方法 obj.__str__ str(obj) obj.__repr__ repr(obj) ...
- python基础语法18 类的内置方法(魔法方法),单例模式
类的内置方法(魔法方法): 凡是在类内部定义,以__开头__结尾的方法,都是类的内置方法,也称之为魔法方法. 类的内置方法,会在某种条件满足下自动触发. 内置方法如下: __new__: 在__ini ...
- CSIC_716_20191129【面向对象高级----反射、类的内置方法(魔法方法)、单例模式】
反射 反射是通过'字符串'对 对象的属性进行操作,反射有四个内置的方法. hasattr 通过字符串 判断对象的属性或者方法是否存在 getattr 通过字符串 获取对象的属性或者方法 ...
- python -- 类中--内置方法
isinstance 和 issubclass isinstance(obj,b) 检查是否obj是否是类b的对象 class A(object):pass class B(A):pass b=B ...
- Python 类的内置方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # p ...
随机推荐
- 12.18 Daily Scrum
最近大家确实都很忙,所以所有功能的实现要等到下周. Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表. ...
- 基于SSH框架的在线考勤系统开发的质量属性
我要开发的是一个基于SSH框架的在线考勤系统. 质量属性是指影响质量的相关因素,下面我将分别从6个系统质量属性(可用性,易用性,可修改性,性能,安全性,可测试性)来分析我的系统,以及如何实现这些质量属 ...
- tensorflow win10 系统下安装
安装tensorflow gpu版本 Step1 安装CUDA8.0 进入这个云盘地址下载,密码5aoc 进行CUDA8.0下载.下载完成后解压,打开exe文件直接按照默认进行安装,安装步骤比较繁琐, ...
- docker网络调试过程
#1: 添加永久网桥 vi /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTROTO=static IPADDR ...
- FreeMarker has_content等价于StringUtils.isNotNullOrEmpty
has_content It is true if the variable exists (and isn't Java null) and is not "empty", ot ...
- HTML5的placeHolder在IE9下workaround引发的Bug(按下葫芦起了瓢)
详见StackOverFlow的:Simple jQuery form Validation: Checking for empty .val() failing in ie9 due to plac ...
- Windows 安装补丁的另外一种方法
Windows的补丁安装时经常出现异常提示: 如果安装不上的话 可以使用dism的方式来进行安装: 具体方法: 1. 将补丁包 一般为msu 或者是exe文件,改成rar后缀,并且解压缩,获取cab文 ...
- poj 3352 Road Construction(边双连通分量+缩点)
题目链接:http://poj.org/problem?id=3352 这题和poj 3177 一样,参考http://www.cnblogs.com/frog112111/p/3367039.htm ...
- Linux文件权限属性后面有个点
坑啊,新上的机器,监控怎么都不好使,各种报错说:没有权限 什么情况? 仔细查看,发现文件权限属性后面怎么多了个点,类似如下: 这是什么? 原来: 开启了SELinux功能的Linux系统就会有这个点. ...
- int ,Intege,String 三者之间的转换
注:如果使用JDK5.0的话,JVM会自动完成装包解包的. 1.Integer转换成int的方法 Integer i = new Integer(10); int k = i.intValue();即 ...