十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇内容介绍了“怎么掌握Python内置方法和属性应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联是一家专注于成都做网站、成都网站设计与策划设计,巫溪网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:巫溪等地区。巫溪做网站价格咨询:13518219792
1. 前言
python除了丰富的第三方库外,本身也提供了一些内在的方法和底层的一些属性,大家比较常用的如dict、list、set、min、max、range、sorted等。
2. 内置方法和函数介绍
enumerate
如果你需要遍历可迭代的对象,有需要获取它的序号,可以用enumerate, 每一个next返回的是一个tuple
list1 = [1, 2, 3, 4] list2 = [4, 3, 2, 1] for idx, value in enumerate(list1): print(idx, value, list2[idx]) # 0 1 4 # 1 2 3 # 2 3 2 # 3 4 1
zip zip从参数中的多个迭代器取元素组合成一个新的迭代器;
# 给list加上序号 b = [4, 3, 2, 1] for i in zip(range(len(b)), b): print(i) # (0, 4) # (1, 3) # (2, 2) # (3, 1)
globals():一个描述当前执行过程中全局符号表的字典,可以看出你执行的所有过程
id(object):python对象的唯一标识
staticmethod 类静态函数注解
@staticmethod def test(): print('this is static method') Foo.test = test Foo.test()
类的属性 我们来看下一个类的申明,如下:
class Foo(): """this is test class""" def __init__(self, name): self.name = name def run(self): print('running')
# 列出类的所有成员和属性 dir(Foo) ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'run'] # 类的注释 Foo.__doc__ # 'this is test class' # 类自定义属性 Foo.__dict__ mappingproxy({'__module__': '__main__', '__doc__': 'this is test class', '__init__':, 'run': , '__dict__': , '__weakref__': }) # 类的父类 Foo.__base__ # 类的名字 Foo.__name__
类的实例化和初始化
# python类先通过__new__实例化,再调用__init__进行初始化类成员 foo = Foo('milk')
类的属性添加和访问
# 类的访问 foo.name foo.run() # 可以通过setattr 动态的添加属性 def method(): print("cow") setattr(foo, "type", "cow") setattr(foo, "getcow", method) # cow foo.type foo.getcow() # 动态删除属性 delattr delattr(foo, "type") # getattr 获取成员属性 if hasattr(foo, "run"): # 判断是否有属性 func = getattr(foo, "run") func()
3. 单例模式应用
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。单例模式要求在类的使用过程中只实例化一次,所有对象都共享一个实例。创建的方法是在实例的时候判断下是否已经实例过了,有则返回实例化过的全局实例。python是如何实现的呢?关键是找到实例化的地方,对就是前面说的__new__
class Singleton(object): def __new__(cls, *args, **kwargs): if not hasattr(cls, '_instance'): cls._instance = object.__new__(cls) return cls._instance def __init__(self, name): self.name = name a = Singleton('name1') b = Singleton('name2') print(id(a), id(b)) print(a.name, b.name) # 1689352213112 1689352213112 # name2 name2
4. 反射应用
反射在许多框架中都有使用到,简单就是通过类的名称(字符串)来实例化类。一个典型的场景就是通过配置的方式来动态控制类的执行,比如定时任务的执行,通过维护每个定时任务类的执行时间,在执行时间到的时候,通过反射方式实例化类,执行任务,在java中也非常的常见。
python的实现可以通过上面说的getattr获取模块中的类, 通过methodcaller来调用方法。我们来看一个简单的例子
import importlib from operator import methodcaller class Foo(): """this is test class""" def __init__(self, name): self.name = name def run(self, info): print('running %s' % info) # 类所在的模块,默认情况__main__, 可以通过Foo.__dict__ 中'__module__'获取 api_module = importlib.import_module('__main__') # getattr获取模块中的类, 这里Foo是字符串哦 clazz = getattr(api_module, 'Foo') # 实例化 params = ["milk"] instance = clazz(*params) # 方法调用, 方法也是字符串methodcaller(方法名, 方法参数) task_result = methodcaller("run", "reflection")(instance) # running reflection
“怎么掌握Python内置方法和属性应用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!