# 一、绑定方法:特殊之处在于将调用者本身当做第一个参数自动传入
# 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. MySQL中 int(11)和int(10)有没有区别!!

    结论:int(11)  int(3)  int(20)  若不勾选填充0,那么效果统统一样,若勾选了填充0:查询出来的效果 会是这样: int(11)  00000000123 int(3)  123 ...

  2. TActionManager Delphi 超级方便的快捷键 草草

    delphi 中用快捷键 草 实在是 太简单了 . 自己摸索出来的 方法 --------------------------------------------------------------- ...

  3. [Java][并发编程]AQS以及其相关同步器的源码解析

    AQS以及其相关同步器的源码解析 概念 AQS(AbstractQueuedSynchronizer)抽象的队列同步器.是用来构建锁或者其他同步器组件的重量级基础框架以及整个JUC体系的基石.通过内置 ...

  4. 写好C#代码的技巧

    写好C#代码的技巧 编者导语 本文来自https://www.pluralsight.com,作者Afzaal Ahmad Zeeshan. 原文包含以下三篇文章: <编写更好的C#代码简介&g ...

  5. Python_json类方法

    Python_json类方法 import requests import json headers = { "User-Agent": "Mozilla/5.0 (Li ...

  6. springboot集成腾讯cos实现文件上传

    腾讯对象存储介绍 对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性.低成本.可靠安全等优点.通过控制台.API.SDK 和工具等 ...

  7. springboot jpa自定义SQL查询

    说明 在使用JPA实现数据持久化过程中经常会遇到这种情况:我有2张表是一对多的关系,需要通过一个外键ID去关联查询到另外一张表的字段.例如,1张商品表food_info其中存有商品分类ID categ ...

  8. 【Azure Cloud Service(Extended Support)】如何使用外延服务迁移应用?

    问题一:迁移到云服务扩展后,之前经典版的云服务的部署槽会变成单一的部署槽,关于两个云服务扩展版之间的部署交换能否提供一个演示? 对于具有双槽的云服务(Classic),根据文档中的建议,在迁移到云服务 ...

  9. 【Azure API 管理】 为APIM创建一个审批订阅申请的RBAC角色,最少的Action内容是什么呢?

    问题描述 在使用APIM服务中,需要为专门的一组用户赋予特殊的权限:审批APIM用户的对产品的订阅.需要自定义一个RBAC角色,那么如何来设置最少的Action满足需求呢? 问题解答 要对APIM订阅 ...

  10. Java 属性赋值的先后顺序

    1 package com.bytezero.circle; 2 /** 3 * 4 * @Description 5 * @author Bytezero·zhenglei! Email:42049 ...