首页 > 其他 > 详细

面向对象(五)--isinstance与issubclass方法、反射、内置方法

时间:2019-02-21 23:55:06      阅读:254      评论:0      收藏:0      [点我收藏+]

一、isinstance与issubclass方法

1、isinstance是用来判断对象是否是某个类

  isinstance(obj,class)

2、issubclass是用来判断一个类是否为另一个类的子类

  issubclass(Bar,Foo)

class Foo:
    pass


class Bar(Foo):
    pass


obj = Foo()
print(isinstance(obj, Foo))      # True

print(issubclass(Bar, Foo))      # True

isinstance与issubclass

二、反射

1、什么是反射?

  反射:主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。

   在python面向对象中的反射,是通过字符串来操作类或者对象的属性。

使用反射的好处:1、实现可拔插机制。2、动态导入模块(基于反射当前模块成员)。

2、如何用反射?

有4个可以实现自省的函数(适用于类和对象)

hasattr(判断有没有该属性)
getattr(拿到属性)
setattr(设置属性)
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(peo1, eat))  # peo1.eat
# True
print(getattr(peo1, eat))  # peo1.eat
# <bound method People.eat of <__main__.People object at 0x0000000002775FD0>>
print(getattr(peo1, xxxxx, None))
# None
setattr(peo1, age, 18)  # peo1.age=18
print(peo1.age)
# 18
print(peo1.__dict__)
# {‘name‘: ‘egon‘, ‘age‘: 18}

delattr(peo1, name)  # del peo1.name
print(peo1.__dict__)
View Code

三、自定义内置方法来定制类的功能

1,、__str__方法。

在类内部定义一个函数__str__,不需要任何参数,在对象被打印时自动触发,应该在方法内采集与对象self有关的信息,然后拼成字符串返回。 

 1 class People:
 2     def __init__(self,name,age):
 3         self.name=name
 4         self.age=age
 5 
 6     def __str__(self):
 7         return name:%s age:%s %(self.name,self.age)
 8         #自己可以设置打印格式#
 9 obj=People(egon,13)
10 print(obj)      #obj.__str__()

 

面向对象(五)--isinstance与issubclass方法、反射、内置方法

原文:https://www.cnblogs.com/zhangbingsheng/p/10416017.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!