首页 > Python > 正文

python中的class

标签:python

之前的文章介绍了modulepackage

我们知道package是以文件夹的形式组织的,每个文件夹下的.py文件称之为module。而class在每个.py文件中。

最基本的class

一个简单的class示例如下所示:

class MyClass:
    """A simple example class"""
    i = 12345#成员变量

    def f(self):#成员方法
        return 'hello world'

要实例化一个class可以通过new instance=ClassName()的方式实例化。而成员变量和成员方法可以通过instance.name或者instance.function_name的方式调用。

上述MyClass的示例如下:

c=MyClass()
print(c.i)
#12345
print(c.f())
#hello world

复杂一点的例子

更复杂一点的例子:

class Complex:
    i=[]
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i.append(imagpart)

调用方式:

x = Complex(3.0, -4.5)
print(x.r,x.i)
#3.0 [-4.5]
xx = Complex(3.0, -2)
print(xx.r,xx.i)
#3.0 [-4.5, -2]

这里添加了__init__()内置方法用于初始化class中的成员变量。这里可以看到类Complex的两个实例xxx中成员变量i的输出是不同的。关于类中的变量作用域将在下文介绍,暂且不表。

class中变量的作用域

首先让我们运行下面的代码:

def scope_test():
    def do_local():
        spam = "local spam"

    def do_nonlocal():
        nonlocal spam
        spam = "nonlocal spam"

    def do_global():
        global spam
        spam = "global spam"

    spam = "test spam"
    do_local()
    print("After local assignment:", spam)
    do_nonlocal()
    print("After nonlocal assignment:", spam)
    do_global()
    print("After global assignment:", spam)
spam='spam'
scope_test()
print("In global scope:", spam)

得到的输出是:

After local assignment: test spam
After nonlocal assignment: nonlocal spam
After global assignment: nonlocal spam
In global scope: global spam

下面将对上述代码进行分析:

首先定义了全局变量spam,并赋值‘spam’。

接着实例化类scope_test(),执行类中的代码:

    spam = "test spam"
    do_local()
    print("After local assignment:", spam)
    do_nonlocal()
    print("After nonlocal assignment:", spam)
    do_global()
    print("After global assignment:", spam)
  • 第一个变量spam的作用域是类scope_test,并将局部变量spam赋值为test spam
  • do_local()spam变量的作用域是do_local()方法,因而只是创建了一个本地变量,并赋值为local spam,但在方法之外失效。
  • 此时,print方法打印的spam变量是第一步中的局部spam变量,输出即是test spam
  • do_nonlocal()方法中将spam变量通过nonlocal关键字表示使用的是局部变量,因而此时的spam是第一步声明的spam局部变量。此时spam变量的值变为nonlocal spam
  • 按照上一步分系,此时打印的值应该是nonlocal spam
  • do_global()中通过global关键字声明使用的spam是全局变量,因而全局变量spam的值修改为global spam
  • 这里输出的是局部变量spam,因而输出是nonlocal spam

最后回到最外层的代码:

print("In global scope:", spam)

这里的变量spam是全局变量,根据上面的分析可以知道spam已经被修改为global spam,因而输出是global spam

以上介绍了pythonclass的基本使用方法,之后介绍了class中变量的作用域范围,了解之后基本就能掌握class的基本使用方法了。


原创文章,转载请注明出处!
本文链接:http://youran.tech/posts/python%E4%B8%AD%E7%9A%84class.html
上篇: 如何更新ubuntu中cmake版本
下篇: python中的标准库(1)

留言: