Python无类再理解--metaclass,type

简介: 上次理解过一次,时间久了,就忘了。。 再学习一次。。 http://blog.jobbole.com/21351/ ======================= 但是,Python中的类还远不止如此。

上次理解过一次,时间久了,就忘了。。

再学习一次。。

http://blog.jobbole.com/21351/

=======================

但是,Python中的类还远不止如此。类同样也是一种对象。是的,没错,就是对象。只要你使用关键字class,Python解释器在执行的时候就会创建一个对象。下面的代码段:

将在内存中创建一个对象,名字就是ObjectCreator。这个对象(类)自身拥有创建对象(类实例)的能力,而这就是为什么它是一个类的原因。但是,它的本质仍然是一个对象,于是乎你可以对它做如下的操作:

1)   你可以将它赋值给一个变量

2)   你可以拷贝它

3)   你可以为它增加属性

4)   你可以将它作为函数参数进行传递

=======================

#!/usr/bin/env python
# -*- coding: utf-8 -*-

class ObjectCreator(object):
    pass

print ObjectCreator

def echo(o):
    print o

echo(ObjectCreator)
print hasattr(ObjectCreator, 'new_attribute')
ObjectCreator.new_attribute = 'foo'
print hasattr(ObjectCreator, 'new_attribute')
print ObjectCreator.new_attribute
ObjectCreatorMirror = ObjectCreator
print ObjectCreatorMirror
print ObjectCreatorMirror()

def choose_class(name):
    if name == 'foo':
        class Foo(object):
            pass
        return Foo
    else:
        class Bar(object):
            pass
        return Bar
MyClass = choose_class('foo')
print MyClass
print MyClass()

print type(1)
print type("1")
print type(ObjectCreator)
print type(ObjectCreator())

MyShinyClass = type('MyShinyClass', (), {})
print MyShinyClass
print MyShinyClass()

Foo = type('Foo', (), {'bar': True})
print Foo
print Foo.bar
f = Foo()
print f
print f.bar

def echo_bar(self):
    print self.bar

FooChild = type('FooChild', (Foo,),{'echo_bar': echo_bar})
print FooChild
print FooChild.bar



print hasattr(Foo, 'echo_bar')
print hasattr(FooChild, 'echo_bar')

my_foo = FooChild()
my_foo.echo_bar()

age = 35
print age.__class__
print age.__class__.__class__
name = 'bob'
print name.__class__
print name.__class__.__class__
def foo(): pass
print foo.__class__
print foo.__class__.__class__
class Bar(object): pass
print Bar.__class__
print Bar.__class__.__class__
b = Bar()
print b.__class__
print b.__class__.__class__

目录
相关文章
|
3月前
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
33 1
|
3月前
|
Java C++ Python
Python基础---类
【10月更文挑战第10天】Python类的定义
30 2
|
3月前
|
设计模式 开发者 Python
Python类里引用其他类
Python类里引用其他类
35 4
|
3月前
|
设计模式 开发者 Python
Python 类中引用其他类的实现详解
Python 类中引用其他类的实现详解
68 1
WK
|
3月前
|
Python
Python类命名
在Python编程中,类命名至关重要,影响代码的可读性和维护性。建议使用大写驼峰命名法(如Employee),确保名称简洁且具描述性,避免使用内置类型名及单字母或数字开头,遵循PEP 8风格指南,保持项目内命名风格一致。
WK
24 0
|
3月前
|
程序员 开发者 Python
深度解析Python中的元编程:从装饰器到自定义类创建工具
【10月更文挑战第5天】在现代软件开发中,元编程是一种高级技术,它允许程序员编写能够生成或修改其他程序的代码。这使得开发者可以更灵活地控制和扩展他们的应用逻辑。Python作为一种动态类型语言,提供了丰富的元编程特性,如装饰器、元类以及动态函数和类的创建等。本文将深入探讨这些特性,并通过具体的代码示例来展示如何有效地利用它们。
61 0
|
3月前
|
Python
Python中的类(一)
Python中的类(一)
23 0
|
3月前
|
Python
Python中的类(一)
Python中的类(一)
21 0
|
3月前
|
Python
Python中的类(二)
Python中的类(二)
24 0
|
3月前
|
开发者 Python
Python类和子类的小示例:建模农场
Python类和子类的小示例:建模农场
21 0