以下代码将导致执行print语句
class C1(object):
print 'I am some code executing in C1'
def method1(self):
print 'I am method1'
def method2(self):
print 'I am method2'
pass
我对此感到惊讶,因为我认为只有在实例化课程时才会执行,有人能解释这背后的想法吗?
答案 0 :(得分:8)
我猜你的意思是打印'我是在C1中执行的代码'?
它是在创建类对象时打印的,在这种情况下,当你加载它声明的文件时会发生这种情况。这也是你放置类变量的地方(它可以在其他地方用作Python等价的静态变量)语言)。
如果您想拥有在创建实例时执行的代码,请将其放在__init__()
。
关于该主题的官方Python文档:http://docs.python.org/tutorial/classes.html#class-objects
答案 1 :(得分:2)
在Python中,类定义是可执行语句。
<强> 7.7。课程定义
类定义定义了一个类对象(请参阅标准类型层次结构部分):
classdef ::= "class" classname [inheritance] ":" suite
inheritance ::= "(" [expression_list] ")"
classname ::= identifier
一堂课 definition是一个可执行语句。 它首先评估继承 列表,如果存在。中的每个项目 继承列表应该评估为a 类对象或类类型 允许子类化。班级套房 然后在新的执行中执行 框架(参见命名和 绑定),使用新创建的本地 命名空间和原始全局 命名空间。 (通常,套房 仅包含函数定义。) 当班级的套房结束时 执行,它的执行框架是 丢弃但其本地命名空间是 保存。 [4]然后是一个类对象 使用继承列表创建 基类和保存的本地 属性的名称空间 字典。类名绑定 这个类对象在原文中 本地命名空间。
程序员注:定义了变量 在类定义中是类 变量;他们是所有人共有的 实例。创建实例 变量,它们可以在方法中设置 with self.name = value。课堂和 实例变量是可访问的 通过符号“self.name”,和 实例变量隐藏了一个类 变量具有相同的名称时 以这种方式访问。类变量 例如,可以用作默认值 变量,但使用可变值 可能会导致意想不到的结果。 对于新式类,描述符可以 用于创建实例变量 具有不同的实施细节。
类定义,如函数 定义,可以用一个或多个包裹 更多装饰表达式。该 装饰者的评价规则 表达式与for相同 f是氟烃基; unctions。结果必须是一个类 对象,然后绑定到 班级名称。