1、命名空间
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):
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
也就是说,函数所处的位置的变量名相同的情况下,并且有多个作用域变量,总是优先使用作用域最小的变量。
2、定义类
class MyClass:
def __init__(self):
self.data = []
def print_name(self):
print("Hello, My name is Harry")
<statement‐3>
.
.
.
<statement‐N>
#通常声明为def定义的函数,类里面的参数函数等都可以通过类名进行点号引用
x = MyClass() # 类的实例化 ,实例化第一步进入类会执行__init__函数,通常默认的类参数都在此处定义
#按照上面的定义,仅仅定义了self.data,我们可以使用x.data引用数据。也可以使用x.name = a,实例后定义新的变量,这是合法的
#同样通过x.print_name() 可以调用定义的方法
#注意类中定义的方法的第一个参数,约定俗成的使用self,当然你也可以使用其他任何合法的变量名,但是非常不建议这么做。
3、继承
class DerivedClassName(MyClass,MyClass1, Myclass2):
<statement‐1>
.
.
.
<statement‐N>
#这样我们就定义了一个继承的类,类DerivedClassName,继承了类MyClass
#基本原理是:如果在类中找不到请求调用的属性,就搜索基类。如果基类是由别的类派生而来,这个规则会递归的下去。
#Python是支持多继承的,所以使用如上的方法进行继承就是多继承的方式。
isinstance(obj, int) # 检查类的实例类型
issubclass() # 检查类的继承关系