python学习_day28_面向对象进阶

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习_day28_面向对象进阶相关的知识,希望对你有一定的参考价值。

一、内置函数isinstance和issubclass

1、isinstance()

  isinstance(obj,cls)检查obj是否是类 cls 的对象,类似type()。

class Foo(object):
    pass
obj = Foo()
print(isinstance(obj, Foo))      #输出结果:True

print(isinstance(10,int))        #输出结果:True

  sinstance() 与 type() 区别:type() 不会认为子类是一种父类类型,不考虑继承关系。sinstance() 会认为子类是一种父类类型,考虑继承关系。

class A:
    pass
class B(A):
    pass
isinstance(A(), A)              # returns True
type(A()) == A                  # returns True
isinstance(B(), A)              # returns True
type(B()) == A                  # returns False

(2)issubclass()

  issubclass(sub, super)检查sub类是否是 super 类的派生类/子类

class Foo(object):
    pass
class Bar(Foo):
    pass
print(issubclass(Bar, Foo))    #输出结果:True

二、反射相关

  python面向对象中的反射:通过字符串的形式操作对象相关的属性。如下为4个可以实现自省的函数:

class Foo:
    f = 类的静态变量
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def say_hi(self):
        print(hi,%s%self.name)

obj=Foo(egon,73)

#检测是否含有某属性
print(hasattr(obj,name))     #输出结果:True
print(hasattr(obj,say_hi))             #输出结果:True

#获取属性
n=getattr(obj,name)
print(n)                                 #输出结果:egon
func=getattr(obj,say_hi)
func()                                   #输出结果:hi,egon


#设置属性
setattr(obj,sb,True)
setattr(obj,show_name,lambda self:self.name+sb)
print(obj.__dict__)                      #输出结果:{‘name‘: ‘egon‘, ‘age‘: 73, ‘sb‘: True, ‘show_name‘: <function <lambda> at 0x00000194A8817048>}
print(obj.show_name(obj))

#删除属性
delattr(obj,age)
delattr(obj,show_name)

print(obj.__dict__)                      #输出结果:{‘name‘: ‘egon‘, ‘sb‘: True}

 

以上是关于python学习_day28_面向对象进阶的主要内容,如果未能解决你的问题,请参考以下文章

Python之路,Day8 - 面向对象编程进阶

Python_Day8_面向对象编程进阶

Python面向对象进阶和socket网络编程-day08

目录大纲

Python自动化开发课堂笔记Day08 - Python进阶(面向对象的高级用法,网络编程)

day07_雷神_面向对象进阶