微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python类中的范围令人惊讶的行为

如何解决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 举报,一经查实,本站将立刻删除。