如何解决python类中的范围令人惊讶的行为
| 以下代码将导致执行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
我对此感到惊讶,因为我以为只有在实例化该类后才能执行,有人可以解释一下这背后的想法吗?
解决方法
我猜你的意思是它显示“我是在C1中执行的某些代码”吗?
它是在创建类对象时打印的,在这种情况下,是在加载声明它的文件时发生的。这也是放置类变量(可用作Python的变量)的地方。等价于其他语言的静态变量)。
如果要创建实例时执行的代码,请将其放在
__init__()
中。
关于该主题的官方Python文档:http://docs.python.org/tutorial/classes.html#class-objects
,在Python中,类定义是可执行语句。
引用文档:
7.7。类定义
类定义定义了一个类对象(请参阅标准类型层次结构一节):
classdef ::= \"class\" classname [inheritance] \":\" suite
inheritance ::= \"(\" [expression_list] \")\"
classname ::= identifier
一类
定义是一个可执行语句。
首先评估继承
清单(如果有)。中的每个项目
继承列表应评估为
类对象或类类型
允许子类化。班级的套房
然后在新的执行中执行
框架(请参阅“命名和
绑定),使用新创建的本地
命名空间和原始全局
命名空间。 (通常,套房
仅包含函数定义。)
当班级的套房结束时
执行,其执行框架为
丢弃,但其本地名称空间为
保存。 [4]然后是一个类对象
使用继承列表创建的
基类和保存的本地
属性的名称空间
字典。类名绑定到
原来的此类对象
本地名称空间。
程序员笔记:定义的变量
在类定义中是类
变量他们被所有人共享
实例。创建实例
变量,可以在方法中设置
与self.name =值。班级和
实例变量是可访问的
通过“ self.name”表示法,以及
一个实例变量隐藏一个类
同名变量
以这种方式访问。类变量
例如可以用作默认值
变量,但使用可变值
可能导致意外结果。
对于新型类,描述符可以
用于创建实例变量
具有不同的实现细节。
类定义,如函数
定义,可以用一个或多个
更多装饰器表达式。的
装饰器的评估规则
表达式与
f>功能。结果必须是一个类
对象,然后绑定到
班级名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。