类的内置函数
不推荐type判断数据的类型
x =111
print(type(x) is int)
print(isinstance(x,int))
# 是不是实例的意思,x 是不是实例化的意思
class FOO():
pass
print(issubclass(FOO,object))
判断是不是子类的 功能。 子类涵盖了 子类,子子类
面向对象的高级
内置方法:都是在满足某种条件下自动触发的
class People():
def __init__(self,name,age,f):
self.name = name
self.age = age
self.f = f
def __str__(self): # 打印 对象的信息
# print('dfgds')
return '%s:%s'%(self.name,self.age)
def __del__(self): # 回收资源的功能 ,删对象就会触发运行
self.f.close()
obj = People('zhangsa',19,open('a.tx','w',encoding='utf-8'))
print(obj)
del obj
反射 : 程序运行过程当中 ,可以分析出来一个对象都包含 那些属性,并且可以操纵这些属性
class Foo():
def __init__(self,x,y):
self.x = x
self.y = y
def f1(self):
print('from f1')
obj = Foo(111,222)
需求 这个obj对象,就想知道倒数第一个的属性的值 怎么处理
1、打印这个对象的所有属性,看一下最后一个属性是什么?
res = dir(obj)
# print(res)
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
# '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'f1', 'x', 'y']
res = res[-1]
# 2、打印这个对象的属性字典
print(obj.__dict__) # 通过dict 这个列表可以看到对象的属性值
# 3、根据字典的内容,可以看到每一个属性都跟着一个值
print(obj.__dict__[res]) # 使用dict字典的 ,根据dir里的属性名称为键,打印出这个属性的值、,如果这个对象的属性在类中,或在其父类中,那么找 类的dict和 父类的dict就可以了。
反射的内置命令
hasattr(obj,'x') # 判断对象的属性有没有,使用hasattr 返回 True 是有,返回False 是没有
getattr(obj,'x') # 获取一个对象的属性的 值
任意一个对象的所有属性的值,全部打印出来
import re
for attr in dir(obj):
if not re.search('^__.*__$',attr):
print(getattr(obj,attr))
getattr(obj,'xxxx',None) # 如果没有这个属性怎么办,程序会报错,,,那么返回值定义为None,就不会报错了
setattr(obj,'xxx','111') # 这个命令是给对象添加新的属性的
print(obj.xxx)
delattr(obj,'xxx') # 这个命令是给对象删除属性的