dir
❝此函数获取一个对象并返回可应用于该对象的所有方法的列表,称为属性
❞
print(dir(3)) print(dir(list)) class A: """"清安""" a = A() print(dir(a))
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes'] ['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
❝里面有很多很多的属性,魔术方法里面有讲到部分,此处略作讲解。
❞
class A: """"清安""" name = 'QINGAN' def run(self): return f"{self.run.__name__}!" a = A() print("run name",a.run()) print("__doc__", a.__doc__) print("__class__", a.__class__) print("class __name__", a.__class__.__name__) print("__dict__", A.__dict__) """ run name run is run ! __doc__ "清安 __class__ <class '__main__.A'> __name__ A __dict__ QINGAN """
❝dir()可以看到的属性居多。如果还是没有一个比较好的概念,那么: 举例:自动化的测试报告中的用例说明就能直接使用__doc__。当你不知道类中有哪些字典属性可以使用的时候就可以使用__dict__。在函数以外的地方可以直接使用。此外:
❞
x=dir(dict) print(x) ['__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__ior__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__ror__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
❝你可以获取到某个对象的所有方法与属性,上述没有做说明。当你不知道字典中存在哪些属性可以使用的时候就可以使用这个方法查看指定的对象的属性与方法,并使用他。
❞
自定义dir()
class Dir: def __init__(self,first_name,last_name): self.first_name = first_name self.last_name = last_name def __dir__(self) -> [str]: return [self.first_name,self.last_name] d = Dir('清','安') print(dir(d))
❝有用到魔法函数,如果不清楚没关系,了解,后续请看魔法函数篇章。
❞
id
❝返回对象的标识。保证在同时存在的对象中是唯一的。也就是常听到的内存地址。
❞
cmd进入交互式环境,换一种体验,可以用vscode跟pycharm以及其他的。
>>> x = 1 >>> y = 1 >>> id(x) == id(y) True >>> id(x) 2163759474992 >>> id(y) 2163759474992
>>> list1 = [1,2,3] >>> list2 = [1,2,3] >>> id(list1) == id(list2) False >>> id(list1[0]) == id(list2[0]) True >>> id(list1[0]) 2163759474992 >>> id(list2[0]) 2163759474992 >>> list3 = [2,3,4] >>> id(list3[1]) == id(list2[1]) False >>> id(list3[0]) == id(list2[1]) True >>> id(list3[0]) == id(list1[1]) True >>> id(list3) 2163768100992
>>> dic = {"name":"qa"} >>> dic1 = {"name":"123"} >>> id(dic)==id(dic1) False >>> id(dic['name'])==id(dic1['name']) False >>> dic2 = {"name":"qa"} >>> id(dic)==id(dic2) False >>> id(dic['name'])==id(dic2['name']) True
❝上述小例子中可以看出,对象确实是唯一的,但是其中的值(元素)却不是。