目录
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中,暂未学习