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

一、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__方法。

扫描二维码关注公众号,回复: 5261726 查看本文章

在类内部定义一个函数__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__()

猜你喜欢

转载自www.cnblogs.com/zhangbingsheng/p/10416017.html
今日推荐