# 一、绑定方法:特殊之处在于将调用者本身当做第一个参数自动传入
# 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. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  2. Python面向对象之封装、property特性、绑定方法与非绑定方法

    一.封装 ''' 1.什么封装 封:属性对外是隐藏的,但对内是开放的(对内是开放的是因为在类定义阶段这种隐藏已经发生改变) 装:申请一个名称空间,往里装入一系列名字/属性 2.为什么要封装 封装数据属 ...

  3. Python开发基础-Day21多态与多态性、绑定方法和非绑定方法

    多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...

  4. python基础之多态与多态性、绑定方法和非绑定方法

    多态与多态性 多态 多态并不是一个新的知识 多态是指一类事物有多种形态,在类里就是指一个抽象类有多个子类,因而多态的概念依赖于继承 举个栗子:动物有多种形态,人.狗.猫.猪等,python的序列数据类 ...

  5. 全面解析python类的绑定方法与非绑定方法

    类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. ...

  6. 面向对象(四)--绑定方法与非绑定方法(classmethod、staticmethod装饰器)

    一.绑定方法与非绑定方法 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): (1)绑定给对象的方法:在类内部定义的函数(没有被任何装饰器修饰的)默认就是绑定给对象用的. (2)绑定 ...

  7. 面向对象(四)——classmethod、staticmethod装饰器(绑定方法与非绑定方法)

    classmethod.staticmethod装饰器 一.绑定方法与非绑定方法 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): (1) 绑定到类的方法:用classmethod ...

  8. Learning-Python【25】:绑定方法与非绑定方法

    类中定义函数分为了两大类,绑定方法与非绑定方法,它们有一些特殊之处: 1.绑定方法特殊之处:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法:这个在面向对象第一篇第六 ...

  9. Day 5-5 绑定方法与非绑定方法

    绑定方法与非绑定方法: 在类内部定义的绑定方法,分两大类: classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入 ...

  10. day22-类的封装、property特性以及绑定方法与非绑定方法

    目录 类的封装 两个层面的封装 第一个层面 第二个层面 封装的好处 私有模块 类的propertry特性 setter 和 deleter 类与对象的绑定方法与非绑定方法 类的封装 将类的属性或方法隐 ...

随机推荐

  1. Linux-双网卡绑定bond详解

    1.什么是bond 网卡bond是通过多张物理网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术.Kernels 2.4.12及以后的版本均供bonding模 ...

  2. Spring Boot + MyBatis-Plus 实现 MySQL 主从复制动态数据源切换

    MySQL 主从复制是一种常见的数据库架构,它可以提高数据库的性能和可用性.动态数据源切换则可以根据业务需求,在不同场景下使用不同的数据源,比如在读多写少的场景下,可以通过切换到从库来分担主库的压力. ...

  3. NC16527 [NOIP2013]货车运输

    题目链接 题目 题目描述 A 国有 n 座城市,编号从 1 到 n ,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货物, 司机们想知道每辆车在不超过车辆 ...

  4. NC24755 [USACO 2010 Dec S]Apple Delivery

    题目链接 题目 题目描述 Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course ...

  5. NC50959 To the Max

    题目链接 题目 题目描述 Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...

  6. NC16664 [NOIP2004]合唱队形

    题目链接 题目 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2-,K,他们的身高分 ...

  7. 【Unity3D】Bloom特效

    1 Bloom 特效原理 ​ Bloom 特效是指:将画面中较亮的区域向外扩散,造成一种朦脓的效果.实现 Bloom 特效,一般要经过 3 个阶段处理:亮区域检测.高斯模糊.Bloom 合成. ​ 本 ...

  8. Widget模式

    Widget模式 Widget模式是指借用Web Widget思想将页面分解成组件,针对部件开发,最终组合成完整的页面,Web Widget指的是一块可以在任意页面中执行的代码块,Widget模式不属 ...

  9. java generic 介绍

    一 介绍: 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的"任意化","任意化"带来的缺点是要做显式的强制类型转换, ...

  10. 临时修改session日期格式冲突问题

    输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01' alter session set NLS_DATE_LANGUAGE ...