绑定方法和非绑定方法

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

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

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

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 装饰器来标识。

posted @   hanyingshuo  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示