首页 > 其他分享 >绑定方法和非绑定方法

绑定方法和非绑定方法

时间:2023-10-30 11:25:54浏览次数:29  
标签:__ name self 绑定 Person 方法

绑定方法 对象绑定方法 / 类的绑定方法

对象绑定方法: 定义在类内部,没有装饰器装饰的方法,都是对象的绑定方法

需要对象来调用,对象调用的时候,会把自身传入

class Person:
    def __init__(slef,name='my'):
        self.name=name
        self.age=17
    def change_name(self,name):
        self.name=name
       
p = Person()
p.change_name('mayue')
# 本质就是
# Person.change_name(p,'mayue')

绑定方法: 特殊之处,绑定给谁就是谁来调,并且会把自身传过来

类的绑定方法: 绑定给类的,类来调用,会把类的自身传过来

类的绑定方法用在什么地方 ? :

不需要通过对象,只需要通过类就能获取到一些东西的时候,用类的绑定方法

class Person:
    def __init__(self,name,age):
        self.name=name
        self.age.age
    @classmethod		# 
    def test(cls):
        print(cls)		# cls相当于Person
        print("类的绑定方法")
        # 类实例化产生对象,返回
        return cls('hys', 16)
    @classmethod		# 
    def get_obj_by_name(cls,name):
        # 取到类的名字
        type_class = cls.__name__.lower()	# 把取到的类似转化为小写赋值给type_calss
#思路#1 去文件中查找名字为 name 的pickle文件
     #2 反序列化成对象
     #3 return 对象
        pass
   
# per1 = Person.test()
# 	↑↓作用是一样的↑↓
# per2 = Person('mayue', 17)

admin = Person.get_obj_by_name('hys')
admin.create()

类的绑定方法可以由对象来调

class Person:
    def __init__(self,name,age):
        self.name=name
        self.age.age
    @classmethod		# 默认是对象的绑定方法,把对象传进来,然后@classmethod会把对象转成类---|__>  一
    def test(cls):		# 再调这种方法传进来----------------------------------------------|__>  句话
        print(cls)		# cls相当于Person
        print("类的绑定方法")
       
Person.test()
p = Person('xiaohan', 16)
# 对象可以调用类的绑定方法,也是把该对象的类传入(用的比较少,一般不会用对象调用类的绑定方法)
p.test()

python为类内置的特殊属性

类名.__name__		# 类的名字(字符串)
类名.__doc__		# 类的文档字符串; 可以拿到三引号注释
类名.__bases__	# 类所有父类构成的元组(在讲继承时会讲)
类名.__dict__		# 类的字典属性
类的.__module__	# 类定义所在的模块
类名.__class__	# 实例对应的类(仅新式类中)

总结:

-classmethod 是个装饰器,放在类中函数的上面,该函数就变成了类的绑定方法

-类的绑定方法由类来调用,自动把类传过去(对象也可以调用,一般不用)

-类的绑定方法用在什么地方?

-不需要通过对象,只需要通过类就能完成某些事的时候,就把该方法定义为类的绑定方法

在 Python 中,对象方法是绑定方法,而不是类方法。绑定方法是绑定到类的实例上的方法,它们可以访问实例的属性和其他方法。这些方法在定义时通常接受 self 参数作为第一个参数,以表示实例本身。

类方法是与类相关联的方法,它们可以访问类级别的属性和其他方法。这些方法使用 @classmethod 装饰器来标识,并接受 cls 参数作为第一个参数,以表示当前类。

静态方法与类和实例无关,它们通常用于实用函数,不接受特殊的参数。这些方法使用 @staticmethod 装饰器来标识。

标签:__,name,self,绑定,Person,方法
From: https://www.cnblogs.com/hanyingshuo/p/17797316.html

相关文章

  • scrum开发方法
    一、Scrum概述Scrum本指橄榄球运动中的“争球”的动作——团队通力合作,在场地内传球。这个过程需要认真配合、信念一致、目标明确。这个过程完美体现了对一个团队的所有要求。用Scrum命名一种开发过程,比喻开发团队在开发一个项目时,像打橄榄球一样迅速、激情,人人你争我抢地完成......
  • 按Value对Map进行排序,技术大佬们都在用这个方法
    在Java中,Map的排序一般会根据Key或者Value来进行。按照Value对Map进行排序,通常会用在以下几种场景。1.数据可视化:如果你正在创建一个数据可视化工具,你可能会需要根据数据的值来进行排序。例如,你可能有一个表示员工工资的Map,你想要根据工资值来对员工进行排序,并在图表中展示。2.......
  • 性能测试的实践痛点和解决方法
    昨天有同学找我咨询了一个性能测试相关的问题,他说:他们公司的性能测试实践目前基本成为了形式主义,除了版本迭代时候的单系统单接口压测,没有其他亮点,领导也不重视。想做一些异常测试和高可用测试,体现自己的价值,但又不知道从何入手,该怎么解决当下不被重视的现状?其实很多测试同......
  • java中native源码查找方法
    以Object的hashCode()方法为例:1.下载openjdk源码或从github中查找,这里以github中查找为例;2.GitHub中查找https://github.com/bpupadhyaya/openjdk-8/tree/master/hotspot源码;3.搜索到Object.c源码文件,并查找hashCode字眼,如下所示: 4.由上可知,hashCode方法实际是调用的jvm.c......
  • Java基础 反射获取构造方法
    在Java中,万物皆对象。比如,字节码文件可以看作是Class这个类的对象;Constructor这个类是用来描述构造方法的,所以这个类的对象就表示构造方法的对象;Field这个类是用来描述成员变量的,所以这个类的对象就表示成员变量的对象;Method 这个类是用来描述成员方法的,所以这个类的对......
  • java中方法内的局部变量是在什么时候被创建的
    2023.10.291.不是局部变量在该方法被执行/调用时创建,而是应该为在该变量被声明并赋值时创建,可以理解为“当代码执行到该变量被赋值的代码时才被创建”。栈会为每个方法在运行的时候分配一块独立的栈帧内存区域,栈帧又包含“局部变量表”、“操作数栈”、“动态链接”以及“方法出......
  • python面向对象-学习笔记(六、方法相关的补充)
    私有化方法私有方法classPerson:__age=18#私有方法def__run(self):print("run")#def_Person__run(self):#print("Personrun")p=Person()#p.__run()#p._Person__run()print(Person.__dict__)内置特殊方法......
  • python pandas安装失败的解决方法之一
    从https://www.lfd.uci.edu/~gohlke/pythonlibs/中下载对应的whl文件例:pandas‑1.4.3‑cp39‑cp39‑win32.whl,39指python3.9用下好放到python目录下的Scripts文件夹中,例我的是C:\Users\Administrator\AppData\Local\Programs\Python\Python39-32\Scripts再在路径栏全选输入cmd(......
  • 为什么重写equals方法时一定要重写hashCode方法
    为什么重写equals方法时一定要重写hashCode方法在每个类中,在重写equals方法的时侯,一定要重写hashcode方法。根据Object规范,规范约定:如果两个对象通过equals方法比较是相等的,那么它们的hashCode方法结果值也是相等的。如果两个对象通过equals方法比较是不相等的,那么不要求它......
  • Optional.ofNullable()方法, 参数list或者map如果为null执行 ofNullable(创建个新对象
    Optional.ofNullable()方法举个栗子publicstaticvoidmain(String[]args){List<String>list=null;list.forEach(x->System.out.println(x));}工作中经常会遇到,查询返回空,如果没有判空处理,一不小心就会空指针异常。加上if判断处理也可以,但是jdk1.......