绑定方法
对象的绑定方法/类的绑定方法
对象的绑定方法:
#1.对象的绑定方法
class ThisIsPerson:
address = 'LiuHe'
def __init__(self, name, age):
self.name = name
self.age = age
def print_info(self): #这就是一个绑定给对象的方法
print('%s😄%s是老板,%s岁' % (self.address, self.name, self.age))
obj6 = ThisIsPerson('tiandi', 23)
#注意,用对象来调用没有传入参数,因为参数就是调用的对象本身
obj6.print_info()
LiuHe😄tiandi是老板,23岁
#1.默认情况下,在类中定义的函数就是绑定方法
#2.当用对象本身来调用类中的方法时,默认会把对象本身作为参数传入方法中。而用类名调用时则需要传入参数(对象)。
obj6 = ThisIsPerson('tiandi', 23)
ThisIsPerson.print_info(obj6)
#这就是用类名进行调用,必须传入被绑定对象作为参数
LiuHe😄tiandi是老板,23岁
总结:
#1.默认情况下,在类中定义的函数就是绑定方法
#2.当用对象本身来调用类中的方法时,默认会把对象本身作为参数传入方法中。而用类名调用时则需要传入参数(对象)。
类的绑定方法@classmethod
#类的绑定方法,可以由对象来调
class Person:
'''
注释的内容
'''
def __init__(self,name,age):
# print(self)
self.name=name
self.age=age
@classmethod
def test(cls):
print(cls)
print('类的绑定方法')
# Person.test()
p=Person('nick',18)
#对象可以调用类的绑定方法,也是把该对象的类传入
p.test()
总结:
- classmethod 是个装饰器,放在类中的函数上面,该函数就变成了类的绑定方法
- 类的绑定方法由类来调用,自动把类传过去(对象也可以调,一般不用)
@staticmethod非绑定方法
对象和类都可以调用,但是不会自动传值
作用:
- 跟类和对象都没有关系的时候,可以定义成静态方法,一般在类内部使用,类外部也可以使用
- 就是一个普通函数,想把它拿到类中管理,就可以定义成静态方法
class Person:
def __init__(self,name, age):
self.id=self.get_uuid()
self.name = name
self.age = age
#当成一个普通函数,只不过是写在类内部的
@staticmethod
def static_method():
print('我是静态方法,谁都不绑定')
@staticmethod
def get_uuid():
import uuid
return uuid.uuid4()
@classmethod与statimethod的区别
import settings
class MySQL:
def __init__(self,host,port):
self.host=host
self.port=port
@staticmethod
def from_conf():
return MySQL(settings.HOST,settings.PORT)
# @classmethod #哪个类来调用,就将哪个类当做第一个参数传入
# def from_conf(cls):
# return cls(settings.HOST,settings.PORT)
def __str__(self):
return '就不告诉你'
class Mariadb(MySQL):
def __str__(self):
return '<%s:%s>' %(self.host,self.port)
m=Mariadb.from_conf()
print(m) #我们的意图是想触发Mariadb.__str__,但是结果触发了MySQL.__str__的执行,打印就不告诉你: