C++ 定义类时执行什么代码?

C++ 定义类时执行什么代码?,c++,python,class,metaprogramming,introspection,C++,Python,Class,Metaprogramming,Introspection,当我导入一个有类的模块时,当第一次读取该类并创建类对象时,会执行哪些代码?我有什么办法可以影响发生的事情吗 编辑:我意识到我的问题可能有点太笼统了 我正在寻找一些更低级的东西,这将允许我从C++中进行反思。我用Python扩展C++应用程序。我有一些C++中定义的类,用Python公开。用户可以在脚本中继承这些类,我希望能够在首次定义这些类时获取它们的详细信息。可能会发生很多事情。最基本的原则是: 类块的内容在第一次读取时执行 要了解这一点,请参见以下示例: class Foo(object)

当我导入一个有类的模块时,当第一次读取该类并创建类对象时,会执行哪些代码?我有什么办法可以影响发生的事情吗


编辑:我意识到我的问题可能有点太笼统了


我正在寻找一些更低级的东西,这将允许我从C++中进行反思。我用Python扩展C++应用程序。我有一些C++中定义的类,用Python公开。用户可以在脚本中继承这些类,我希望能够在首次定义这些类时获取它们的详细信息。

可能会发生很多事情。最基本的原则是:

块的内容在第一次读取时执行

要了解这一点,请参见以下示例:

class Foo(object):
    print "bar"

    def __init__(self):
        print "baz"
导入模块时将打印

如果一个类定义了一个元类,那么元类
\uuuuu new\uuuu
函数将在运行代码的类块之后运行

例如:

class MyMeta(type):
    def __new__(mcs, name, bases, kwargs):
        print "I'm the metaclass, just checking in."
        return type.__new__(mcs, name, bases, kwargs)


class Foo(object):
    __metaclass__ = MyMeta

    print "I'm the Foo class"
输出:

I'm the Foo class
I'm the metaclass, just checking in.

我相信其他位也可以运行,这些正是我所熟悉的。

您可能会感兴趣,它们是控制类创建的类。

定义从B继承的类a,并执行C:
a=type('a',(B,C),m
,其中m是包含类成员的字典


您可以使用元类编程来影响流程。不缺少和。

类定义中的代码与任何其他代码一样执行,但创建的任何变量(包括函数定义)将位于类的上下文而不是全局上下文中。这意味着您可以通过添加条件代码动态更改类定义:

class A(object):
    if 1==2:
        def f(self):
            print "the world has gone mad"
    else:
        def f(self):
            print "sanity rules"

>>> a = A()
>>> a.f()
sanity rules
>>> 
然而,我从来没有见过这样做,也想不出这样做的理由——这感觉相当不和谐


正如其他人所指出的,还有许多其他方法可以修改类的行为,包括元类、继承和类装饰器。

Python是被解释的,因此当导入Python模块时,模块级的任何类代码都会运行,同时这些类的元类也会运行——这样类就存在了


C++是编译的:类在导入时已经存在;由于它们已经被创建,因此无法控制它们的创建方式。

实际创建类所执行的代码取决于它是旧样式还是新样式的类-您有首选的python版本吗?@Thomas让它成为python 3。我认为离子是关于从C++的观点来看Python对象的细节…我想。显然我的答案并没有解决这个问题,但是在这个问题被编辑之前更清楚地陈述了这个意图。