5.获取对象信息(部分,待完善)

目录

1.type()

2.isinstance()

3.dir()

4.操作一个对象的状态(getattr获取属性,setattr设置属性,hasattr判断是否存在属性)(attr属性)


1.type()

type()可以用来判断对象的基本类型

如果一个变量指向函数或者类,也可以用type()判断

type()返回的是对应的class类型

方法(method)函数(function)

types()

但如果要判断一个对象是否是函数怎么办?可以使用types模块中定义的常量

关于types:

python的types模块_XYES@fff的博客-CSDN博客_python types

2.isinstance()

通过isinstance()判断对象是否是后边的类型,可以是一个类型,也可以是多个类型 

定义一个父类函数Animal 

class Animal:
    def run(self):
        print("Animal is running")
        pass
    pass

定义一个子类函数Dog 

class Dog(Animal):
    def run(self):
        print("dog is running!")
    pass

创建一个Dog()的实例b 

b = Dog()
print(isinstance(b, Dog))
print(isinstance(b, Animal))

判断b的类型是否是Dog和Animal,返回都是True

此外,isinstance()也可以判断基本类型,判断一个变量是否是某些类型中的一种

print(isinstance((1, 2, 3), (list, tuple)))
print(isinstance(([1, 2, 3], (list, tuple)))

返回的都是True

3.dir()

如果想要获取一个对象的所有属性和方法,可以使用dir()它返回一个包含字符串的list

print(dir('abc'))

返回的是所有方法和属性:

['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']

 类似__xxx__的属性和方法在Python中都是有特殊用途的,例如__len__方法返回的是长度,利用len()返回长度时,其实是在len()函数内自动调用对象的__len__方法,下方的两种输出方法等价

print(len("abd"))
print("abd".__len__())         
# ()必须存在,否则返回<method-wrapper '__len__' of str object at 0x000001E1CB542EB0>
# 属性方法和位置

自己写的类也想用len(Myobject)可以自己写一个__len__

class Mydog(object):
    def __len__(self):
        return 100
    pass

dog = Mydog()
print(len(dog))
print(dog.__len__())

两种方法输出的都是100

4.操作一个对象的状态(getattr获取属性,setattr设置属性,hasattr判断是否存在属性)(attr属性)

class Myobject(object):
    def __init__(self):
        self.x = 9
        pass
    def power(self):
        return self.x**2


obj = Myobject()
print(hasattr(obj, "x"))
setattr(obj, "y", 19)
print(getattr(obj, "y"))
print(hasattr(obj, "y"))

返回结果为True,19,True

getattr传入defult参数

如果不传入一个defult,则gerattr获取一个不存在的属性,会会抛出AttributeError的错误。可以传入一个defult参数,如果属性不存在,就返回默认值

print(getattr(obj, "z", 404))

返回404

也可以获得对象的方法

fn = getattr(obj, "power")

>>>fn

<bound method Myobject.power of <__main__.Myobject object at 0x0000026DC1817C70>>

>>>fn()           # 作用和调用obj.power()作用相同

81

获取对象信息 - 廖雪峰的官方网站,小结:文件流,字节流,网络流都在后续IO中,暂未学习

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值