码迷,mamicode.com
首页 > 编程语言 > 详细

python学习_day28_面向对象进阶

时间:2017-09-24 00:35:37      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:==   subclass   att   div   turn   python   字符   静态   关系   

一、内置函数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_面向对象进阶

标签:==   subclass   att   div   turn   python   字符   静态   关系   

原文地址:http://www.cnblogs.com/seven-007/p/7583446.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!