Python 绑定方法与非绑定方法
用到的:
import uuid -------------- uuid是128位的全局唯一标识符, 通常用32位的一个字符串的形式来表现
uuid.uuid1() ------------- 基于MAC地址,时间戳,随机数来生成唯一的uuid,可以保证全球范围内的唯一性
uuid.uuid3() ------------- 通过计算一个命名空间和名字的md5散列值来给出一个uuid,所以可以保证命名空间中的不同名字具有不同的uuid,但是相同的名字就是相同的uuid了
uuid.uuid4() ------------- 通过伪随机数得到uuid,是有一定概率重复的
uuid.uuid5() ------------- 和uuid3基本相同,只不过采用的散列算法是sha1
@classmethod --------- 加入到定义给类的绑定方法上(绑定给类的应该有类来调用, 但对象其实也可以使用, 只不过自动传入的仍然是类)
@staticmethod --------- 加入到定义的非绑定方法函数上(但是无论谁来调用, 都没有任何自动传值的效果, 就是一个普通函数)
1. 绑定方法
特性: 绑定给谁就应该由谁来调用, 谁来调用就会将谁当作第一个参数自动传入<<精髓在于自动传值>>
绑定方法分为两类:
1. 绑定给对象方法:
在类内部定义的函数(没有被任何装饰器修饰的), 默认就是绑定给对象用的
2.绑定给类的方法:
在类内部定义的函数如果被装饰器@classmethod装饰, 那么则是绑定给类的, 应该由类来调用, 类来调用就自动将类当作第一个参数自动传入
2. 非绑定方法
类中定义的函数如果被装饰器@staticmethod装饰, 那么该函数就变成非绑定方法
既不与类绑定, 又不与对象绑定, 意味着类与对象都可以来调用
但是无论谁来调用, 都没有任何自动传值的效果, 就是一个普通函数
3.应用
如果函数体代码需要用外部传入的类, 则应该将该函数定义成绑定给类的方法
如果函数体代码需要用外部传入的对象, 则应该将该函数定义成绑定给对象的方法
如果函数体代码既不需要外部传入的类也不需要外部传入的对象,则应该将该函数定义成非绑定方法/普通函数
例如:
class Foo:
@classmethod
def f1(cls):
print(cls) def f2(self):
print(self) obj = Foo() print(obj.f2)
>>><bound method Foo.f2 of <__main__.Foo object at 0x000001F2D4AFCCC0>>
print(Foo.f1)
>>><bound method Foo.f1 of <class '__main__.Foo'>>
Foo.f1()
>>><class '__main__.Foo'>
print(Foo)
>>><class '__main__.Foo'>
f1是绑定给类的
绑定给类的应该有类来调用, 但对象其实也可以使用, 只不过自动传入的仍然是类
print(Foo.f1)
>>><bound method Foo.f1 of <class '__main__.Foo'>>
print(obj.f1)
>>><bound method Foo.f1 of <class '__main__.Foo'>>
Foo.f1()
>>><class '__main__.Foo'>
obj.f1()
>>><class '__main__.Foo'>
f2是绑定给对象的
obj.f2()
>>><__main__.Foo object at 0x00000203677CCCF8>
Foo.f2(obj)
>>><__main__.Foo object at 0x00000203677CCCF8>
例子(打印ip和端口):
import settings
import uuid class Mysql:
def __init__(self, ip, port, net):
self.uid = self.create_uid()
self.ip = ip
self.port = port
self.net = net def tell_info(self):
print('%s:%s' % (self.ip, self.port)) @classmethod
def from_conf(cls):
return cls(settings.IP, settings.NET, settings.PORT) @staticmethod
def func(x, y):
print('不与任何人绑定') @staticmethod
def create_uid():
return uuid.uuid1()
默认的实例化方式: 类名(...)
obj = Mysql('10.10.0.9',3307)
一种新的实例化方式: 从配置文件中读取配置完成实例化
obj1 = Mysql.from_conf()
obj1.tell_info()
obj.func()
>>>不与任何人绑定
Mysql.func()
>>>不与任何人绑定
print(obj.func)
>>><function Mysql.func at 0x000002B7DF688A60>
print(Mysql.func)
>>><function Mysql.func at 0x000002B7DF688A60>
Python 绑定方法与非绑定方法的更多相关文章
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- 全面解析python类的绑定方法与非绑定方法
类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. ...
- Python开发基础-Day21多态与多态性、绑定方法和非绑定方法
多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...
- python基础之多态与多态性、绑定方法和非绑定方法
多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...
- Python面向对象之封装、property特性、绑定方法与非绑定方法
一.封装 ''' 1.什么封装 封:属性对外是隐藏的,但对内是开放的(对内是开放的是因为在类定义阶段这种隐藏已经发生改变) 装:申请一个名称空间,往里装入一系列名字/属性 2.为什么要封装 封装数据属 ...
- Day 5-5 绑定方法与非绑定方法
绑定方法与非绑定方法: 在类内部定义的绑定方法,分两大类: classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入 ...
- Learning-Python【25】:绑定方法与非绑定方法
类中定义函数分为了两大类,绑定方法与非绑定方法,它们有一些特殊之处: 1.绑定方法特殊之处:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法:这个在面向对象第一篇第六 ...
- day22-类的封装、property特性以及绑定方法与非绑定方法
目录 类的封装 两个层面的封装 第一个层面 第二个层面 封装的好处 私有模块 类的propertry特性 setter 和 deleter 类与对象的绑定方法与非绑定方法 类的封装 将类的属性或方法隐 ...
- 类的封装,property特性,类与对象的绑定方法和非绑定方法,
类的封装 就是把数据或者方法封装起来 为什么要封装 封装数据的主要原因是:保护隐私 封装方法的主要原因是:隔离复杂度(快门就是傻瓜相机为傻瓜们提供的方法,该方法将内部复杂的照相功能都隐藏起来了,比如你 ...
- Python--多态与多态性、绑定方法与非绑定方法
多态与多态性 多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 1. 序列类型有多种形态:字符串,列表,元组. s='hello' l=[,,] t=('a',' ...
随机推荐
- Mysql数据库的用户和日志管理
Mysql数据库的用户和日志管理 数据库的用户管理 1.mysql用户账号管理 用户账号 user@host user:账户名称 host:此账户可通过哪些客户端主机请求创建连接线程,可以是ip.主机 ...
- Swift4 扩张(Extenstion), 集合(Set)
创建: 2018/03/09 完成: 2018/03/10 更新: 2018/04/19 修改小标题 [扩张的定义与使用协议] -> [通过扩张来采用协议] 更新: 2018/09/18 标题 ...
- E20170517-gg
jaw n. 下巴; 颌; indicator n. 指示器; gator n. 短吻鳄; median n. 中位数; 中线; [数] 中值;
- bzoj 4320: ShangHai2006 Homework【分块】
按根号300000=m分情况讨论 查询是,当x小于等于m,那么可以暴力记录直接出解:否则,用分块维护区间值,查询的时候以x为步长跳根号m次取最小值即可 还有一种并查集方法,来自https://www. ...
- [App Store Connect帮助]七、在 App Store 上发行(3.2)提交至“App 审核”:查看 App 状态历史记录
您可以查看您 App 的某一版本的 App 状态历史记录.在历史记录表中的每一行都包含 App 状态.App 状态更改时间,以及更改的发起人.使用此信息追踪“App 审核”流程中的 App. 若想在 ...
- Spring Boot之配置文件值注入(@ConfigurationProperties)
前言:Spring Boot配置文件值的注入有两种方式,分别是 @ConfigurationProperties @Value 这里我们使用第一种 首先我们创建一个application.yml文件, ...
- Luogu P2735 电网【真·计算几何/Pick定理】By cellur925
题目传送门 刷USACO偶然遇到的,可能是人生中第一道正儿八经的计算几何. 题目大意:在平面直角坐标系中给你一个以格点为顶点的三角形,求三角形中的整点个数. 因为必修5和必修2的阴影很快就想到了数学中 ...
- 事件模型的介绍与Button的ActionListener
事件监听: 这是个很重要的概念,也是个很重要的模型,vb,vc都是这样用,甚至后面学的web框架也在用. 现在我们可以做很多按钮了吧,但是我们的按钮按它是没反应的,现在我们来看看怎么样才能让它有 ...
- sed练习简记
1. 使用多命令选项-e sed -e 'command1' -e 'command2' -e 'command3' 在/etc/passwd文件中搜索root.nobody或mail [root@s ...
- Quartz~关于cron表达式要说的
每20秒执行一次