当前位置:
首页 > Python基础教程 >
-
Python_常见内置函数(3)
1 >>> class A:
2 num = 0 #类属性
3 #类方法
4 @classmethod
5 def setNum(cls,newNum):
6 cls.num = newNum
7 #实例方法
8 def __init__(self):
9 self.age = 1 #实例属性
10 def setAge(self, newAge):
11 self.age = newAge
12 #静态方法
13 @staticmethod
14 def printInfo():
15 print('类方法修改类属性,实例方法修改实例属性,静态方法不访问类')
16
17
18 >>> a = A()
19 >>> a.setAge(18)
20 >>> a.age
21 18
22 >>> A.setAge(18)
23 Traceback (most recent call last):
24 File "<pyshell#21>", line 1, in <module>
25 A.setAge(18)
26 TypeError: setAge() missing 1 required positional argument: 'newAge'
27 >>> A.setNum(100)
28 >>> A.num
29 100
30 >>> A.printInfo()
31 类方法修改类属性,实例方法修改实例属性,静态方法不访问类
- property(fget=None, fset=None, fdel=None, doc=None); @property
效果:
1 >>> c = C()
2 >>> c.x = 10
3 >>> c.x
4 10
5 >>> del c.x
6 >>> c.x
7 Traceback (most recent call last):
8 File "<pyshell#18>", line 1, in <module>
9 c.x
10 File "<pyshell#13>", line 5, in x
11 return self._x
12 AttributeError: 'C' object has no attribute '_x'
方式1:
1 >>> class C(object):
2 def getx(self): return self._x
3 def setx(self, value): self._x = value
4 def delx(self): del self._x
5 x = property(getx, setx, delx, "I'm the 'x' property.")
方式2:
1 >>> class C(object):
2 @property
3 def x(self):
4 "I am the 'x' property."
5 return self._x
6 @x.setter
7 def x(self, value):
8 self._x = value
9 @x.deleter
10 def x(self):
11 del self._x
- super
1 >>> class A:
2 def add(self, x):
3 print(x+1)
4
5 >>> class B(A):
6 def add(self, x):
7 super().add(x)
8
9 >>> B().add(2)
10 3
- globals, locals, vars([object])
1 >>> word = 'hello world'
2 >>> def test(x):
3 y = 1
4 print(locals())
5
6 >>> test(2)
7 {'x': 2, 'y': 1}
8 >>> globals()
9 {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'word': 'hello world', 'test': <function test at 0x0000023BE4CEEF28>}
10 >>> class A:
11 a = 1
12
13 >>> vars(A)
14 mappingproxy({'__module__': '__main__', 'a': 1, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None})
(11)可执行对象
- eval(source, globals=None, locals=None)
- exec(source, globals=None, locals=None)
- compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)
1 >>> eval('2 * 3 + 4')
2 10
3 >>> exec('print("hello world")')
4 hello world
5 >>> eval_code = compile('2 * 3 + 4', '', 'eval')
6 >>> eval_code
7 <code object <module> at 0x00000269270686F0, file "", line 1>
8 >>> eval(eval_code)
9 10
10 >>> exec_code = compile('print("hello world")', '', 'exec')
11 >>> exec_code
12 <code object <module> at 0x0000026927074150, file "", line 1>
13 >>> exec(exec_code)
14 hello world
需要注意的是,exec函数和eval函数都是将用户提供的字符串作为代码执行,将无法控制代码的行为,会带来严重的安全隐患,使用的时候要慎重。
1 >>> exec('abs="xyz"')
2 >>> abs(-1)
3 Traceback (most recent call last):
4 File "<pyshell#13>", line 1, in <module>
5 abs(-1)
6 TypeError: 'str' object is not callable
报错的原因是使用exec函数将'xyz'赋值给了abs,abs不再是求绝对值的函数了。为了避免污染命名空间,在调用exec函数时,可以给它传递第二个参数——命名空间。
1 >>> scope = {}
2 >>> exec('abs="xyz"', scope)
3 >>> abs(-1)
4 1
5 >>> scope['abs']
6 'xyz'
注:参考了https://www.cnblogs.com/lucky-heng/p/10161190.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式