常用魔术方法
方法 | 描述 |
---|---|
_del_() | 销毁魔术方法,触发时机:当一个对象在内存中被销毁的时候自动执行 |
_call()_ | 可以让类的实例具有类似于函数的行为, 进一步模糊了函数和对象之间的概念。对象后面加括号,触发执行。即:对象() 或者 类()() |
_repr_() | 改变对象的字符串显示 此方法是str()的备胎,如果找不到str()就会找repr()方法。 |
_new_() | 实例化魔术方法 触发时机: 在实例化对时触发 参数:至少一个cls 接收当前类 返回值:必须返回一个对象实例 作用:实例化对象 注意:实例化对象是Object类底层实现,其他类继承了Object的new才能够实现 实例化对象。 |
_str_() | 使用print(对象)或者str(对象)的时候触发 |
_hash_() | Hash算法,是将一个不定长的输入,通过哈希函 数变换成一个定长的输出,即哈希值。 |
# __del__()
class Test:
def __init__(self):
print('程序执行')
print('你好')
def __del__(self): #当程序执行完了执行del方法
print('程序执行完了')
s = Test()
print('程序执行完了2')
'''
程序执行
你好
程序执行完了2
程序执行完了
'''
# __call__()
class Sum:
def sum(self):
a = 0
i = 0
while i < 101:
a = a + i
i += 1
print(a)
def __call__(self, *args, **kwargs):
self.sum()
Sum()()
sum = Sum()
sum()
'''
5050
5050
'''
# __repr__()
class Str:
def __init__(self,name,age):
self.name = name
self.age = age
# def __str__(self):
# return '__str__() 姓名:%s age: %s' % (self.name, self.age)
def __repr__(self):
return '__repr__()姓名:%s age: %s' %(self.name, self.age)
per = Str('李明',18)
print(per)
#__repr__()姓名:李明 age: 18,当str方法不存在,会找repr方法
#__new__()
class Dog:
def __new__(cls, *args, **kwargs):
print('new') # 重写
new = object.__new__(cls) # 调用父类object的new方法才创建new对象
new.__init__()
new.__del__()
def __init__(self):
print('int')
def __del__(self):
print('del')
d = Dog()
'''
new
int
del
del
'''
class Num:
def __init__(self,num):
self.num = num
n1 = Num(1)
n2 = Num(2)
n3 = Num(3)
lst = [n1,n2,n3]
set1 = set(lst)
print(set1)
{<__main__.Num object at 0x00000203CBA400C8>, <__main__.Num object at 0x00000203CBA401C8>, <__main__.Num object at 0x00000203CBA40248>}
hash()函数默认调用Object类的hash()方法。Hash值是对象的id值/16。
类的常用函数
方法 | 描述 |
---|---|
issubclass() | 检测一个类是否是另外一个类的子类 ,返回值布尔类型,格式issubclass(被检测类, 父类) ,或者issubclass(被检测类, (父类1,父类2, 父类3…)) |
isinstance() | 检测一个对象是否是某个类的对象 ,返回值时布尔,issubclass(对象, 类),issubclass(对象, (类1,类2,类3)),只要一个类是当前对象对象的类,那么最终结果是True |
反射方法
python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射)
方法 | 描述 |
---|---|
hasattr() | 判断是否有此变量,返回bool 值 ,hasattr(对象/类,‘成员名’) |
getattr() | 获取属性值或者获取方法变量的地址 ,getattr(对象,‘属性名’[,成员不存在时的默认值]), 返回成员的值 |
setattr() | 给类或者对象设置属性或者方法 (少),setattr(对象,‘成员名’,值) |
delattr() | 删除类或者对象的属性或方法 (少),delattr(对象,成员) |
class Teacher:
name = '斯密斯'
def __init__(self,name,age):
self.name = name
self.age = age
t = Teacher('haha',25)
print(hasattr(t,'name')) #判断是否有此变量
print(getattr(t,'name')) # 获取变量值
setattr(t,'adress','陕西') #添加
print(t.adress)
delattr(t,'adress') # 移除 'adress'
# print(t.adress)
True
haha
陕西