类的内置方法__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内核及分析 第六周 分析Linux内核创建一个新进程的过程
实验过程 1.github上克隆相应的mengning/menu.git 2.测试menuOS,测试fork直接执行结果 3.配置调试系统,进入gdb调试,利用file linux-3.18.6/vm ...
- github学习心得
1.在GitHub上建立项目登录GitHub后,你可以在右边靠中那里找到一个按钮“New Repository”,点击过后,填入项目名称.说明和网址过后就可以创建.2.配置Git以及上传代码安装Git ...
- HDOJ2004_成绩转换
水题:用数组标识各个阶段分数的等级即可. HDOJ2004_成绩转换 #include<stdio.h> #include<stdlib.h> #include<math ...
- Magazine Ad CodeForces - 803D (二分+贪心)
The main city magazine offers its readers an opportunity to publish their ads. The format of the ad ...
- Quartz中时间表达式的设置-----corn表达式 (转)(http://www.cnblogs.com/GarfieldTom/p/3746290.html)
Quartz中时间表达式的设置-----corn表达式 (注:这是让我看比较明白的一个博文,但是抱歉,没有找到原作者,如有侵犯,请告知) 时间格式: <!-- s m h d m w(?) y( ...
- PHP加密与编码技术
md5加密: string md5( string $str [,bool $raw output=false]) md5加密方法用的挺多,有两个参数,第一个参数是要加密的字符串,第二个参数默认为f ...
- 表格属性和BFC(block framing content)
th和tr都是表示列但是 th有一个居中加粗的效果. 表单是由 : 1表单域:<form name=" " method="get/post" acti ...
- Log4Net日志配置
1.添加Log4net.dll引用 将release版Log4net.dll拷贝到Lib文件夹,然后添加引用.
- php的一些算法题
1.有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,请编程输出两年内每个月的兔子总数为多少? <?php function getRes ...
- Nginx ACCESS阶段 统一的用户权限验证系统
L59 需要编译到Nginx --with-http_auth_request_module 功能介绍: 主要当收到用户请求的时候 通过反向代理方式生成子请求至上游服务器,如果上游服务器返回2xx 则 ...