python之面向对象高级进阶-反射与内置模块

内置函数模块isinstanceissubaclass

class Foo:
    pass

obj=Foo()

print(isinstance(obj,Foo))     #isinstance(obj,Foo)判断是否obj是否是类 Foo 的对象
isinstance(obj,Foo)判断是否obj是否是类 Foo 的对象


class Parent:
    pass

class Sub(Parent):
    pass

print(issubclass(Sub,Parent))
print(issubclass(Parent,object))    #issubclass(sub, Parent)判断sub类是否是 Parent 类的派生类
issubclass(sub, Parent)判断sub类是否是 Parent 类的派生类

 

1.什么是反射

    通过字符串来操作类或者对象的属性

2.如何用   

hasattr

    getattr

    delattr

class People:
    country='China'
    def __init__(self,name):
        self.name=name


    def eat(self):
        print('%s is eating' %self.name)



peo1=People('egon')       

print(hasattr(peol,‘eat’))                  #判断peol里面有没eat字符 返回值:true或false

print(getattr(peol,‘eat’))                  #判断对象中有没有eat字符对应的方法或属性,有的话得到属性结果或函数内存地址

print(getattr(peol,'xxxxx',None))                     #对象中没有的话,直接报错,可以在后面添加一个返回条件

setattr(peol,'age',18)   #peol.age=18             #增加属性

delattr(peol,name)      #del peol.name           #删除属性

例:

class Ftp:    

    def __init__(self,ip,port):

            self.ip=ip

            self.port=port

    def get(self):

            print('GET function')

    def put(self):

           print('PUT function')



    def run (self):

        while True:

        method=getattr(self,choice,None)      #判断对象中有没对应发方法或属性,是函数属性是话返回的函数内存地址

        if method is None:

                print('输入的命令不存在‘)

        else:

                method()

con=Ftp(‘1.1.1.1’,23)

con.run

 

posted @ 2018-06-30 12:23  Marcki  阅读(160)  评论(0编辑  收藏  举报