绑定方法与非绑定方法
admin
2023-07-08 17:44:15
0

1.绑定方法

1.1绑定到类的方法:@classmethod装饰器装饰的方法

@classmethod是给类使用的,即绑定到类,
1.类在调用该方法时,会将类本身当做参数传给类方法的第一个参数(即self)
2.对象在调用该方法时,也会将类本身当做参数传给类方法的第一个参数(即self)
3.哪个类调用,就传入哪个类,子类在调用父类中的类绑定方法时,传入的是子类

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita

class MySQL:
    def __init__(self,host,port):
        self.host=host
        self.port=port

    @classmethod
    def from_conf(cls):
        print(cls)

conn=MySQL("127.0.0.1","3306")
print(MySQL.from_conf)
print(conn.from_conf)
#对象也可以调用,但是默认传的第一个参数仍然是类
MySQL.from_conf()
conn.from_conf()

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
>
>



Process finished with exit code 0
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita

class MySQL:
    def __init__(self,host,port):
        self.host=host
        self.port=port

    @classmethod
    def from_conf(cls):
        print(cls)

class mysql(MySQL):
    pass
# 哪个类调用,传入的就是哪个类的。这里传入的是子类mysql的类
mysql.from_conf()

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py


Process finished with exit code 0

1.2绑定到对象的方法:没有被任何装饰器装饰的方法

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita
class MySQL:
    def __init__(self,host,port):
        self.host=host
        self.port=port

    @classmethod
    def from_conf(cls):
        print(cls)
    # 绑定到对象的方法
    def from_obj(cls):
        print(cls)
obj = MySQL("","")
print(obj.from_conf)
# 绑定到对象的方法
print(obj.from_obj)

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
>
>

Process finished with exit code 0

2.非绑定方法

在类内部使用staticmethod装饰的函数即是非绑定方法,就是普通函数
staticmethod不与类或对象绑定,谁都可以调用,没有自动传值的效果

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita

class MySQL:
    def __init__(self,host,port):
        self.host=host
        self.port=port

    @staticmethod
    def from_conf(cls):
        print(cls)
        #return cls("127.0.0.1","3306")

conn=MySQL("127.0.0.1","3306")

MySQL.from_conf("class test")
conn.from_conf("obj test")

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
class test
obj test

Process finished with exit code 0
"非绑定方法也可以是隐藏函数,同样是不能被外部调用"
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: vita

class MySQL:
    def __init__(self,host,port):
        self.host=host
        self.port=port

    @staticmethod
    def __from_conf(cls):
        print(cls)
        #return cls("127.0.0.1","3306")

conn=MySQL("127.0.0.1","3306")

# "两条语句报错都是下面的错误,可以自行尝试"
MySQL.from_conf("class test")
conn.from_conf("obj test")

E:\PythonProject\python-test\venvP3\Scripts\python.exe E:/PythonProject/python-test/BasicGrammer/test.py
Traceback (most recent call last):
  File "E:/PythonProject/python-test/BasicGrammer/test.py", line 19, in 
    conn.from_conf("obj test")
AttributeError: 'MySQL' object has no attribute 'from_conf'

Process finished with exit code 1

相关内容

热门资讯

美前副总统:共和党失去了方向,... 2026年是美国的中期选举年,共和党选情不利,可能在年底的选举中遭遇挫败。美国前副总统彭斯5月31日...
南枝原来去过中国?《给阿嬷的情... 《给阿嬷的情书》票房口碑双丰收,目前票房已突破13亿。凤凰卫视最新一期《问答神州》专访了该片导演蓝鸿...
法国海军扣押一艘俄“影子舰队”... 近日,法国海军在大西洋海域扣押了一艘据称从俄罗斯摩尔曼斯克出发的油轮,引发俄方强烈不满。俄新社6月1...
凤凰晚报丨面粉染头模仿黄仁勋,... 今日人物【面粉染头模仿黄仁勋,农村青年走红后称遭“法务”警告】“先赔偿5000元肖像侵权使用费,再删...
亲特朗普极右派候选人领跑哥伦比... 【文/观察者网 熊超然】当地时间5月31日,哥伦比亚总统选举拉开帷幕,首轮投票计票工作已完成逾99%...
2026年度网络举报系列宣传活... 5月28日至29日,以“每一件举报,都是共治的力量——豫你e行 同心护网”为主题的2026年度网络举...
中原首例帝企鹅DNA性别鉴定!... 近日,郑州海昌海洋公园正式对外公布中原首对人工繁育的帝企鹅萌宝的DNA性别鉴定报告。这是中原首个将 ...
我国科学家为细胞信号“导航”开... 新华社济南5月31日电(记者张力元)人体细胞犹如一座精密的通信城市,每天都有大量“指令”穿梭传递,调...
极端大风突袭哈尔滨!过山车停摆... 极目新闻记者 詹钘5月31日,受强对流天气影响,哈尔滨国际会展中心体育场相关设施受到损坏,原计划当晚...
三原电缆取得电缆接头连接用防护... 国家知识产权局信息显示,上海三原电缆附件有限公司取得一项名为“一种电缆接头连接用防护结构”的专利,授...