92.object根类
object 类
是所有类的父类,因此所有的类都有object 类的属性和方法
。我们显然有必要深 入研究一下object 类
的结构。对于我们继续深入学习Python 很有好处。
dir()
查看对象属性
为了深入学习对象,我们先学习内置函数
dir()
,他可以让我们方便的看到指定对象所有的 属性。
从上面我们可以发现这样几个要点:
Person
对象增加了六个属性:__dict__ , __module__, __weakref__, age, name, say_age
- object的所有属性,Person 类作为object 的子类,显然包含了所有的属性。
- 我们打印
age
、name
、say_age
,发现say_age
虽然是方法,实际上也是属性。只不过, 这个属性的类型是“method”而已。
age <class 'int'>
name <class 'str'>
say_age <class 'method'>
【注】关于 object
这些属性的详细学习,会在后面学习中逐个涉及。在此,无法一一展开。
重写__str__
object 有一个
__str__()
方法,用于返回一个对于“对象的描述”
,对应于内置函数 str()
经常用于print()
方法,帮助我们查看对象的信息。__str__()
可以重写。
【测试】查看对象所有属性
以及和object
进行比对
class Person: # 默认继承object类
def __init__(self, name):
self.name = name
def __str__(self):
return "名字是:{0}".format(self.name) # 这里是 重写了 object 的方法
p = Person("onepis")
print(p)
print(dir(p))
# output
名字是:onepis # print(p) 的输出
['__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__',
'name']
帮助理解 __str__
In [3]: class Person:
...: def __init__(self,name,age):
...: self.name=name
...: self.age=age
...:
In [4]: Person("onepis","27").__str__()
Out[4]: '<__main__.Person object at 0x0AD7D3F0>' # 没有重写 返回的默认的是这样的。
In [5]: a=Person("onepis","27")
In [6]: print(a)
<__main__.Person object at 0x0ADEE570>
# ---------------------------------------------------
In [7]: class Person:
...: def __init__(self,name,age):
...: self.name=name
...: self.age=age
...: def __str__(self):
...: return f"this is a Person object"
...:
In [8]: Person("onepis","27").__str__()
Out[8]: 'this is a Person object' # 重写后返回的是我们 自己想返回的内容。
In [9]: a=Person("onepis","27")
In [10]: print(a)
'this is a Person object' # 重写后返回的是我们 自己想返回的内容。