Python—面向对象04 绑定方法
坚持把梳理的知识都给记下来.......
嗯哼哼
1.绑定方法与非绑定方法
在类内部定义的函数,分为两大类:
绑定到类的方法:用classmethod装饰器装饰的方法。
为类量身定制 类.boud_method(),自动将类当作第一个参数传入 (其实对象也可调用,但仍将类当作第一个参数传入)
绑定到对象的方法:没有被任何装饰器装饰的方法。
为对象量身定制 对象.boud_method(),自动将对象当作第一个参数传入 (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说)
二:非绑定方法: 用staticmethod装饰器装饰的方法
不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已
注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说
class Foo:
def __init__(self, name):
self.name = name
# 绑定到对象的方法:没有被任何装饰器装饰的方法。
def tell(self):
print("name is :%s" % self.name)
# 绑定到类的方法,用classmethod装饰器装饰的方法。
@classmethod
def fun1(cls): # cls = Foo
print(cls)
# 非绑定方法: 用staticmethod装饰器装饰的方法
@staticmethod
def fun2(x, y):
return x+y
f = Foo("Astro")
f.tell() # name is :Astro
Foo.fun1() # <class '__main__.Foo'> 会将类作为第一个参数传入
f.fun1() # <class '__main__.Foo'> 其实类也可以调用绑定到类的方法,但是会将类作为第一个参数传入
# 非绑定方法 不与类或对象绑定,类和对象都可以调用
print(Foo.fun2(1, 2)) # 3
print(f.fun2(3, 4)) # 7
2.绑定方法与非绑定方法使用场景
settings.py :
name = "gd"
age = 19
sex = 'boy'
import settings as st
import hashlib
import time
class People:
def __init__(self, name, age, sex):
self.id = self.create_id()
self.name = name
self.age = age
self.sex = sex
def tell_info(self):
print("Name:%s Age:%s Sex:%s" % (self.name, self.age, self.sex))
@classmethod
def from_conf(cls):
obj = cls(
st.name,
st.age,
st.sex
)
return obj
@staticmethod
def create_id():
m = hashlib.md5(str(time.time()).encode("utf-8"))
return m.hexdigest()
p = People('Astro', 20, 'boy')
# 绑定给对象,就应该由对象来调用,自动将对象本身当做第一个参数传入
p.tell_info() # Name:Astro Age:20 Sex:boy
# 绑定给类,就应该由类来调用,自动将类本身当做第一个参数传入
p2 = People.from_conf()
p2.tell_info() # Name:gd Age:19 Sex:boy
# 绑定方法,不与类和对象绑定,谁都可以调用,没有传值一说
p3 = People('Nurato', 20, 'boy')
print(p3.id) # d8ddce8d1ce05f1fcb19c97dba33cb45
Python—面向对象04 绑定方法的更多相关文章
- Python面向对象04 /封装、多态、鸭子类型、类的约束、super
Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...
- python 3全栈开发-面向对象之绑定方法(classmethod与staticmethod的区别)、多态、封装的特性property
一.面向对象绑定方法 一.类中定义的函数分成两大类 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定制 ...
- Python——面向对象、绑定对象、组合
1. 面向过程VS面向对象 (1)面向过程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂 ...
- Python面向对象之内置方法
1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, s ...
- python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异
1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html 1.__init__() 创建对 ...
- python 类的绑定方法和非绑定方法
一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. class People: def __ ...
- 全面解析python类的绑定方法与非绑定方法
类中的方法有两类: 绑定方法 非绑定方法 一.绑定方法 1.对象的绑定方法 首先我们明确一个知识点,凡是类中的方法或函数,默认情况下都是绑定给对象使用的.下面,我们通过实例,来慢慢解析绑定方法的应用. ...
- Python面向对象之魔术方法
__str__ 改变对象的字符串显示.可以理解为使用print函数打印一个对象时,会自动调用对象的__str__方法 class Student: def __init__(self, name, a ...
- Python - 面向对象编程 - 魔术方法(双下划线方法)
什么是魔术方法 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method 魔术方法,也叫双下划线方法 有哪些重要的魔术方法? __new__ https://www.c ...
随机推荐
- elasticSearch请求流程图
- 记一次MongoDB性能问题
下面文章转载自火丁笔记,原作者描述了一次MongoDB数据迁移过程中遇到的性能问题及其解决方案,中间追查问题的方法和工具值得我们学习.下面是其原文: 最近忙着把一个项目从MySQL迁移到MongoDB ...
- 记自己的hexo个人博客
https://othercoding.github.io/
- asp.net5中使用NLog进行日志记录
asp.net5中提供了性能强大的日志框架,本身也提供了几种日志记录方法,比如记录到控制台或者事件中等,但是,对大部分程序员来说,更喜欢使用类似log4net或者Nlog这种日志记录方式,灵活而强大. ...
- small zhishi
\\192.168.1.201\d$\Data 访问远程计算机文件资源管理器
- .net编程知识点
一.编程思想 OOP(面向对象) 面向对象三大特性(多态如何体现)及五项原则 AOP(面向切面编程) 面向切面编程静态植入和动态植入 二.c#23种设计模式 三.Castle是针对.NET平台的一个开 ...
- python学习(六)--正则的一些例子
import re #正则表达式#compile函数,--将正则表达式转变为内部函数,提高执行效率strr = "python123456"pattern = "Pyth ...
- 百度云BCC 上的Ubuntu 16.04 LTS - 升级内核到4.14.87
99元1年,整来玩玩. =============================================================== 重点是这个libssl1.1的deb,安装上了之 ...
- VS2015自定义类模板的方法
在前一段时间忽然想给自己电脑上的vs新建类的时候添加一个自定义个注释,但是在网上搜了很久都是说vs2012之类的方法系统也都是win7.XP之类的独独没有win8的.故此自己不断的尝试修改发现方法如下 ...
- Java Socket, DatagramSocket, ServerSocketChannel io代码跟踪
Java Socket, DatagramSocket, ServerSocketChannel这三个分别对应了,TCP, udp, NIO通信API封装.JDK封装了,想跟下代码,看下具体最后是怎么 ...