Python-类

私有函数

在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 spam
		spam = "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>的global
		print('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 = f1
c = CLS()
c.f(3,4)

<完>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值