首页 > 代码库 > Python基础day-22[面向对象:反射,其他命令参数]

Python基础day-22[面向对象:反射,其他命令参数]

反射:

  什么是反射:

    主要是指程序可以访问,检测和修改本身状态或行为的一种能力。

  Python中的一切事物都是对象。

 四个实现自省的函数:

  类和对象均可以使用。

class A:
    name = abc
    age = 19

#类的使用
print(hasattr(A,n1me))   #判断类是否含有某个属性   hasattr(类或者对象名,属性名)
print(getattr(A,name))   #获取对应属性的属性值    getattr(类或者对象名,属性名,出错返回的内容)  <----出错返回内容如果不写的话,当获取一个不存在的属性会报错,写了就会返回写的内容  
setattr(A,name,aaa)  #设置属性的属性值    setattr(类或者对象名,属性名,属性值)
print(A.name)
print(A.__dict__)
delattr(A,name)     #删除属性    delattr(类或者对象名,属性名)
print(A.__dict__)

#对象的使用
p1 = A()   #实例化对象,下方使用方法同上
print(hasattr(p1,age))
print(getattr(p1,age))
setattr(p1,age,20)
print(p1.age)
delattr(p1,age)
print(p1.__dict__)

执行结果:
D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py
False
abc
aaa
{__module__: __main__, name: aaa, age: 19, __dict__: <attribute __dict__ of A objects>, __weakref__: <attribute __weakref__ of A objects>, __doc__: None}
{__module__: __main__, age: 19, __dict__: <attribute __dict__ of A objects>, __weakref__: <attribute __weakref__ of A objects>, __doc__: None}
True
19
20
{}

Process finished with exit code 0

 其他命令参数:

__str__:改变对象的字符串显示。

  原来是在类中定义一个显示信息的函数,并且每次调用的时候都需要对象+方法调用才能使用,使用__str__ 后我们可以直接print这个对象就可以显示信息了。

class Peolple:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __str__(self):
        return Name%s\nAge:%s\nSex:%s%(self.name,self.age,self.sex)  #定义信息返回格式

a = Peolple(abc,18,male)

print(a)   

执行结果:
D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py
Nameabc
Age:18
Sex:male

Process finished with exit code 0

 

__del__:删除

  清理对象使用,对象执行完毕或者被清理时触发执行。

class Peolple:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __str__(self):
        return Name:%s\nAge:%s\nSex:%s%(self.name,self.age,self.sex)

    def __del__(self):
        print(%s is del%self.name)

a = Peolple(abc,18,male)
del a      #对象 a 被删除,触发__del__
print(----------main program--------------)

执行结果:
D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py
abc is del
----------main program--------------

Process finished with exit code 0


换一下:
class Peolple:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __str__(self):
        return Name:%s\nAge:%s\nSex:%s%(self.name,self.age,self.sex)

    def __del__(self):
        print(%s is del%self.name)

a = Peolple(abc,18,male)
print(----------main program--------------)   #程序执行完毕后,清理 a对象时触发__del__

执行结果:
D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py
----------main program--------------
abc is del

Process finished with exit code 0

 

使用类似查看字典等中括号形式,访问对应的属性:

  类似:print(a[‘name‘])

class Peolple:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __getitem__(self, item):   #查询属性
        return getattr(self, item)
    def __setitem__(self, key, value):  #设置属性
        setattr(self,key,value)
    def __delitem__(self, key):  #删除属性
        delattr(self,key)

a = Peolple(abc,18,male)  #实例化对象
print(a[name])   #获取name的属性值
 
a[name] = a‘   #设置name的属性值
print(a[name])

del a[name]   #删除name 属性
print(a.__dict__)

执行结果:
D:\Python\Python36-32\python.exe E:/Python/DAY-22/练习.py
abc
a
{age: 18, sex: male}

Process finished with exit code 0

 

Python基础day-22[面向对象:反射,其他命令参数]