Python/Article/python12/1.md

64 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 一、Python 中类也是对象 #
在了解元类之前,我们先进一步理解 Python 中的类,在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在 Python 中这一点也是一样的。
```python
class ObjectCreator(object):
pass
mObject = ObjectCreator()
print(mObject)
```
输出结果:
```
<__main__.ObjectCreator object at 0x00000000023EE048>
```
但是Python 中的类有一点跟大多数的编程语言不同,在 Python 中,可以把类理解成也是一种对象。对的,这里没有写错,就是对象。
为什么呢?
因为只要使用关键字 `class` Python 解释器在执行的时候就会创建一个对象。
如:
```python
class ObjectCreator(object):
pass
```
当程序运行这段代码的时候就会在内存中创建一个对象名字就是ObjectCreator。这个对象自身拥有创建对象类实例的能力而这就是为什么它是一个类的原因。但是它的本质仍然是一个对象于是我们可以对它做如下的操作
```python
class ObjectCreator(object):
pass
def echo(ob):
print(ob)
mObject = ObjectCreator()
print(mObject)
# 可以直接打印一个类,因为它其实也是一个对象
print(ObjectCreator)
# 可以直接把一个类作为参数传给函数(注意这里是类,是没有实例化的)
echo(ObjectCreator)
# 也可以直接把类赋值给一个变量
objectCreator = ObjectCreator
print(objectCreator)
```
输出的结果如下:
```
<__main__.ObjectCreator object at 0x000000000240E358>
<class '__main__.ObjectCreator'>
<class '__main__.ObjectCreator'>
<class '__main__.ObjectCreator'>
```