9.绑定方法与非绑定方法

绑定方法
1.绑定给类的方法(classmethod)

@classmethod是一个装饰器,起作用就是声明下面的函数是绑定给类的,可用 类.函数名 来进行调用即绑定到类。类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入),python为我们内置了函数classmethod来把类中的函数定义成类方法。

#settings.py
# HOST='127.0.0.1'
# PORT=3306
# DB_PATH=r'C:\Users\Administrator\PycharmProjects\test\面向对象编程\test1\db'

import settings

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

    @classmethod
    def from_conf(cls):
        print(cls)
        return cls(settings.HOST,settings.PORT)

print(MySQL.from_conf) #<bound method MySQL.from_conf of <class '__main__.MySQL'>>
mysql=MySQL.from_conf() #将settings中内容作为参数,传入类MYSQL中 ,相等于执行from_conf(MYSQL)
print(mysql.host and mysql.port)

<bound method MySQL.from_conf of <class '__main__.MySQL'>>
# <class '__main__.MySQL'>
# 3306
2.绑定到对象的方法:没有被任何装饰器装饰的方法。

就是在实例化对象后,直接调用类中的函数和属性

非绑定方法

非绑定方法:用@staticmethod装饰器装饰的方法。statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果。
注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法,不管谁来调用,都没有自动传值一说。

import hashlib
import time

class Mysql :
    def __init__(self,host,post):
        self.host=host
        self.post=post

        self.id=self.create_id()

    @staticmethod
    def create_id():
        m=hashlib.md5(str(time.time()).encode('utf-8'))
        return m.hexdigest()

mysql=Mysql('127.1.1.0',3308)
print(Mysql.create_id())
print(mysql.create_id())
print(mysql.id)

# eace12deda949739c083c113981e0873
# eace12deda949739c083c113981e0873
# eace12deda949739c083c113981e0873
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值