Python-类
来源:互联网 发布:php好学吗 编辑:程序博客网 时间:2024/05/04 08:03
私有函数
在python的类中双下划线开头的为私有属性,双下划线开头双下划线结尾的为内置特殊函数。
python中不存在保护函数,有些地方约定把单下划线开头的属性成为保护的,这只是个约定,在python中将其视为公有的。
Name VS Object
Name在python中可以绑定多个object,一个object也可以绑定多个Name alias。在不可变的基本类型(int,string,tuple)中,Name和object几乎感觉不到区别。但是在可变的对象中就会显示特别明显,如下面例子a和b两个Name同时指向一个object,但是通过任何一个进行修改都会修改这个object。Name更像一个指针的用法。
>>> a = [1,2,3]
>>> b = a
>>> b.append(4)
>>> b
[1, 2, 3, 4]
>>> a
[1, 2, 3, 4]
global VS nonlocal
同样是为了说明非local变量但是nonlocal必须在闭包的环境下使用,如下图需要在enclosing的scope_test内部的do_nonlocal函数中用来声明spam不是do_nonlocal()的local变量。但是global则声明的是全局变量,而不是相对概念。下面是nonlocal例子:
def scope_test():def do_nonlocal():nonlocal spamspam = "nonlocal"spam = "hello"do_nonlocal()print(spam)scope_test()
上面程序输出为:nonlocal
nonlocal和global例子:def scope_test():spam = "scope_test_spam"def do_local():spam = "local"def do_nonlocal():nonlocal spam#这里的spam变量是指scope_test范围内有效的spam变量spam = "nonlocal" def do_nonlocal2():nonlocal spam#这里的spam变量是指<span style="color:#ff0000;">scope_test函数范围内</span>有效的spam变量print('do_nonlocal2:', spam)def do_global():global spam #这里的spam变量范围是<span style="color:#ff0000;">整个文件范围</span>的globalprint('do_global:', spam)###函数调用do_local()print('do_local:', spam)do_nonlocal()print('do_nonlocal:', spam)do_nonlocal2()do_global()print('在函数scope_test执行到最后:', spam)############spam = "GLOBAL_SPAM"scope_test()#执行结果为#do_local: scope_test_spam#do_nonlocal: nonlocal#do_nonlocal2: nonlocal#do_global: GLOBAL_SPAM#在函数scope_test执行到最后: nonlocal
attribute VS method
成员变量和函数重名的时候,attribute会覆盖函数。所以在项目中需要明确函数和属性的命名规则,防止覆盖,出现bug。
成员函数也可以定义在外边,如下所示f1可以单独使用,也可以在类中进行使用。另外self仅仅是一个参数,只不过大家约定起名self,实际编程中可以使用任意的参数。在调用的时候c.f实际执行的是CLS.f(c)
# 在类外边定义的函数,也可以在类的内部进行引用def f1(self, x, y): return min(x, x+y)class CLS: f = f1c = CLS()c.f(3,4)
<完>
0 0
- python类
- Python 类
- PYTHON类
- Python类
- python类
- python 类
- Python类
- python 类
- python 类
- Python 类
- python 类
- python类
- Python-类
- Python类
- python 类
- python 类
- python 类
- python类
- hdu 1248 寒冰王座
- 国际化: 理解Java平台上的Locale
- StringBuffer类
- 多维数组转json
- 【转】 01背包问题 动态规划解法
- Python-类
- 函数指针
- 程序设计实习MOOC/第十三周编程作业/C:UNIMODAL PALINDROMIC DECOMPOSITIONS(Greater New York 2002)
- 集合框架—Set
- [AC自动机+dp+矩阵快速幂] poj 2778 DNA Sequence
- 聚簇索引、非聚簇索引、覆盖索引
- 完备匹配下的最大权匹配
- POJ 1036 Gangsters
- week 13 练习一