python面向对象(绑定方法与非绑定方法)
# 一、绑定方法:特殊之处在于将调用者本身当做第一个参数自动传入
# 1)绑定给对象的方法:调用者是对象,自动传入的是对象
# 2)绑定给类的方法:调用者是类,自动传入的是类 # 类方法的应用
# 需求一
class MySQL:
def __init__(self, host, port):
self.host = host
self.port = port def func(self):
print('{}:{}'.format(self.host, self.port)) obj1 = MySQL('127.0.0.1', 3306)
obj1.func() # 绑定对象的方法,对象直接传入
# 127.0.0.1:3306
MySQL.func(obj1)
# 127.0.0.1:3306
print(obj1.__dict__)
# {'host': '127.0.0.1', 'port': 3306} # 需求二(实例化传参,从配置文件中来)
import settings class MySQL:
def __init__(self, host, port):
self.host = host
self.port = port def func(self):
print('{}:{}'.format(self.host, self.port)) obj2 = MySQL(settings.HOST, settings.PORT)
print(obj2.__dict__) # 需求三(参数写活,构造函数,涉及到传类)
import settings class MySQL:
def __init__(self, host, port):
self.host = host
self.port = port def func(self):
print('{}:{}'.format(self.host, self.port)) @classmethod # 将下面的函数装饰成绑定给类的方法
def from_conf(cls): # 从配置文件中读取配置进行初始化
return cls(settings.HOST, settings.PORT) obj3 = MySQL.from_conf() # 调用类方法,自动将类MySQL当作第一个参数传给cls
print(obj3.__dict__)
print(MySQL.from_conf)
# <bound method MySQL.from_conf of <class '__main__.MySQL'>> 绑定到类
print(obj3.func)
# <bound method MySQL.func of <__main__.MySQL object at 0x000002C1EC073190>> 绑定到对象 # 二、非绑定方法--》静态方法
# 没有绑定给任何人:调用者可以是类、对象,没有自动传参的效果
class MySQL:
def __init__(self, host, port):
self.nid = self.create_id() # 实例化几次,就调用create_id函数几次
self.host = host
self.port = port @staticmethod # 将下述函数装饰成一个静态方法
def create_id():
import uuid
return uuid.uuid4() obj1 = MySQL('1.1.0.1', 3306) MySQL.create_id()
obj1.create_id()
print(obj1.__dict__)
# {'nid': UUID('0eeba8ce-ce15-4f56-bd62-78c10a6230c4'), 'host': '1.1.0.1', 'port': 3306}
print(MySQL.create_id)
# <function MySQL.create_id at 0x0000021B017F2550> 没有自动传参的效果,普通函数,有几个参数就传几个参数
print(obj1.create_id)
# <function MySQL.create_id at 0x0000021B017F2550> 没有自动传参的效果,普通函数,有几个参数就传几个参数
总结绑定方法与非绑定方法的使用:若类中需要一个功能,
该功能的实现代码中需要引用对象则将其定义成对象方法、
需要引用类则将其定义成类方法、无需引用类或对象则将其定义成静态方法。
内置函数:
print(abs(-1)) # 绝对值
print(all([1, 'aaa', 'e'])) # and运算,返回布尔值
print(all([])) print(any([0, None, 1])) # or运算,返回布尔值
print(any([])) print(bin(10))
print(oct(10))
print(hex(10)) print(bool('')) class Foo:
pass print(callable(Foo)) # 是否可被调用 # -----掌握
print(divmod(1000, 33)) # 商和余数 (30, 10) # -----掌握 class Foo:
pass obj = Foo()
obj.xxx = 1
print(dir(obj)) # obj.哪些属性 # -----掌握
for k, v in enumerate(['a', 'b', 'c']): # 列表的索引和对应的值
print(k, v)
'''
0 a
1 b
2 c
''' # -----掌握
res = eval('2+3') # 执行字符串中的表达式
print(res) # 5 # -----掌握
class C1:
pass obj = C1()
print(isinstance(obj, C1))
print(isinstance([], list)) # 类型判断推荐使用isinstance
print(type([]) is list) # 不推荐使用 time=__import__('time')
python面向对象(绑定方法与非绑定方法)的更多相关文章
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- Python面向对象之封装、property特性、绑定方法与非绑定方法
一.封装 ''' 1.什么封装 封:属性对外是隐藏的,但对内是开放的(对内是开放的是因为在类定义阶段这种隐藏已经发生改变) 装:申请一个名称空间,往里装入一系列名字/属性 2.为什么要封装 封装数据属 ...
- Python开发基础-Day21多态与多态性、绑定方法和非绑定方法
多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...
- python基础之多态与多态性、绑定方法和非绑定方法
多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...
- 全面解析python类的绑定方法与非绑定方法
类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. ...
- 面向对象(四)--绑定方法与非绑定方法(classmethod、staticmethod装饰器)
一.绑定方法与非绑定方法 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): (1)绑定给对象的方法:在类内部定义的函数(没有被任何装饰器修饰的)默认就是绑定给对象用的. (2)绑定 ...
- 面向对象(四)——classmethod、staticmethod装饰器(绑定方法与非绑定方法)
classmethod.staticmethod装饰器 一.绑定方法与非绑定方法 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): (1) 绑定到类的方法:用classmethod ...
- Learning-Python【25】:绑定方法与非绑定方法
类中定义函数分为了两大类,绑定方法与非绑定方法,它们有一些特殊之处: 1.绑定方法特殊之处:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法:这个在面向对象第一篇第六 ...
- Day 5-5 绑定方法与非绑定方法
绑定方法与非绑定方法: 在类内部定义的绑定方法,分两大类: classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入 ...
- day22-类的封装、property特性以及绑定方法与非绑定方法
目录 类的封装 两个层面的封装 第一个层面 第二个层面 封装的好处 私有模块 类的propertry特性 setter 和 deleter 类与对象的绑定方法与非绑定方法 类的封装 将类的属性或方法隐 ...
随机推荐
- 安装Electron时卡在install.js不动的解决方案
问题来源,发现即使 源切换成淘宝的之后,安装 electron的时候还是慢死,郁闷,后来百度才发现,原来,还需要设置一个地方!!! 经过试验,果然快了 爽.... 之前在安装Electron的时候,经 ...
- Java-统计程序运行的时长(计算两个时间相差的毫秒数、秒数)
最近在做Hbase的查询性能验证,需要统计查询的执行时长,所以需要统计开始时间和结束时间的时间差. 下面是使用SimpleDateFormat和Date计算时间差(相差毫秒数)的程序示例,仅供参考. ...
- Pandas处理股票数据
import tushare as ts import pandas as pd # 下载茅台所有股票交易数据 # df = ts.get_k_data(code="600519" ...
- JS LeetCode 566. 重塑矩阵题解分析,数组降维的几种方式
壹 ❀ 引 今天是过完年到公司的第二天,年前因为封版,到今天我们小组是第一个发版的组,然后就各种踩坑,到现在还在公司等运维解决jenkins问题,闲着也是闲着,做一道算法题,简单记录下解题思路,本题来 ...
- Java并发编程实例--9.使用本地线程变量
并发程序一个重要方面就是共享数据. 这一点在继承了Thread类或实现了Runnable接口的对象中有着特殊的重要性. 如果你创建了一个实现了Runnable接口的类对象并且用这个对象开启了N个线程对 ...
- SIP协议解析
起始行(start-line) INVITE sip:34020000001320000001@202.102.11.27:35611 SIP/2.0 请求消息的起始行包括三个参数,格式:Reques ...
- 利用BARK和Telebot进行VPS实时预警推送
前言 在服务器的日常维护和蓝队的日常监控中,经常需要对服务器出现的各种问题进行及时的预警推送.国外的服务器推荐使用telebot,而国内由于特殊的网络环境,则推荐使用BARK.Chanify等进行推送 ...
- mysql分组后获取每个组排序后的第一条数据(整行)
有一个学生分数表student,数据结构是这样的 CREATE TABLE `student` ( `id` int(11) NOT NULL, `student_id` int(11) DEFAUL ...
- logback 常用配置(详解)
转自:https://blog.csdn.net/qq_36850813/article/details/83092051 官方文档参考:https://logback.qos.ch/manual/a ...
- jq中的正则
正则匹配表达式 \w \s \d \b . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 等价于 '[A-Za-z0-9_]'. \s 匹配任意的空白符 \d 匹配数字 \b 匹配单 ...