# 一、绑定方法:特殊之处在于将调用者本身当做第一个参数自动传入
# 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. 初次尝试GPU Driven —— 大范围植被渲染

    初次尝试GPU Driven -- 大范围植被渲染 GPU Driver简单概要,即把整体逻辑放到GPU上运行,解放CPU压榨GPU,初次尝试,记录一下研究过程. 渡神纪 塞尔达 塞尔达 塞尔达 在开 ...

  2. NC16576 [NOIP2012]摆花

    题目链接 题目 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m 盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n 种花,从1 到n 标号.为了在门口展出更多种花,规定第i ...

  3. MQTT-QoS与协议流程

    QoS的报文收发流程 QoS 0 最多交付一次,消息有可能丢失,最低的QoS等级,没有任何的机制,不需要等待确认和重传,只要保证消息发送,也可能到达不了接收端 QoS0消息发送流程: 发送端调用API ...

  4. Js中数组空位问题

    Js中数组空位问题 JavaScript中数组空位指的是数组中的empty,其表示的是在该位置没有任何值,而且empty是区别于undefined的,同样empty也不属于Js的任何数据类型,并且在J ...

  5. ELK Stack 分布式日志系统 大纲

    1. Elastic Stack 官网: https://www.elastic.co/cn/what-is/elk-stack 2. 硬件配置 2.1 推算依据 ES JVM heap 最大可以设置 ...

  6. 硬件开发笔记(二):硬件开发基本流程,制作一个USB转RS232的模块(一):开发基本过程和元器件选型

    前言   做个usb转串口,同时兼容ttl,讲述硬件模块基础的开发流程,本篇描述了全流程过程,然后选型了合适的元器件.   基本流程   以下是笔者个人从事过相关硬件研发,总结出来的流程,仅代表个人意 ...

  7. 尝试通过uniapp仿微信页面

    最近一直想弄一个app,然后刚好看到Uniapp这个技术,然后最近就用几个晚上琢磨了下: 先看下成果: 1.通讯页面,这个是通过插件uni-indexed-list 索引列表 进行改造过后:改造过程还 ...

  8. javascript浮点数相减、相乘出现一长串小数

    149.7 * 100 = 14969.999999999998 3.57 - 2.33 = 1.2399999999999998 这是JavaScript浮点运算采用IEEE 754标准导致的Bug ...

  9. 【Azure 应用服务】App Service - 在修改应用服务计划的页面中,为什么无法查看到同一个资源组下面的其他应用服务计划(App Service Plan)呢?

    问题描述 在App Service的门户上,可以通过"Change App Service Plan"来改变当前App Service所属的应用服务计划(App Service P ...

  10. 【Azure 应用服务】azure function powershell 调用 New-AzADServicePrincipal -DisplayName $sp -PasswordCredential $spCred

    问题描述 powershell 调用New-AzADServicePrincipal -DisplayName $sp -PasswordCredential $spCred,出现如下错误: Reso ...