类的内置方法__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 ...
随机推荐
- Linux内核分析第七周总结
第七章 可执行程序的装载 可执行程序的生成 可执行程序的生成: c语言代码--->经过编译器的预处理--->编译成汇编代码--->由汇编器编译成目标代码--->链接成可执行文件 ...
- jeecg的下拉列表
jeecg里面下拉列表的使用 ①建立数据字典seo_id <t:dictSelect field="operationPromotionAccount" typeGroupC ...
- Github以及推广
非常抱歉,我忘记在这个博客上发一遍了,之前是我同学代发,而我忘记把链接给发过来... Github: http://www.cnblogs.com/case1/p/5060015.html 推广: h ...
- Debian中APT的前世今生
https://baike.baidu.com/item/apt-get/2360755 https://www.debian.org/doc/manuals/debian-handbook/sect ...
- ubuntu16安装MySQL
MySQL 是一种开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一部分安装.它使用关系数据库和SQL(结构化查询语言) ...
- Java之Date Time API (Java 8 新特性)
Java 8 – Date Time API Java 8 comes with a much improved and much required change in the way date an ...
- 一本通1585【例 1】Amount of Degrees
1585: [例 1]Amount of Degrees 时间限制: 1000 ms 内存限制: 524288 KB 题目描述 原题来自:NEERC 2000 Central Subr ...
- AtCoder WTF 2019 C2. Triangular Lamps Hard
题目链接 感觉这样的题真的称得上是鬼斧神工啊,\(\text{OI}\)中能多一些这样的题目就太好了. 题意: 有一个二维的三角坐标系,大概如图所示(图是从atcoder里偷下来的): 坐标系上的每个 ...
- BZOJ4530 BJOI2014大融合(线段树合并+并查集+dfs序)
易知所求的是两棵子树大小的乘积.先建出最后所得到的树,求出dfs序和子树大小.之后考虑如何在动态加边过程中维护子树大小.这个可以用树剖比较简单的实现,但还有一种更快更优美的做法就是线段树合并.对每个点 ...
- Java中如何输出对勾,ASCII编码与字符串相互转换
Java中如何输出对勾? 最简单的方法是,从那个地方拷贝一个对勾的字符,然后System.out.println("√"); 但是心里总会担心,万一机器不认这个字符该怎么办?(可能 ...