python面向对象编程之封装-绑定方法与非绑定方法

1.绑定方法

    特性:绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入

    (精髓在于自动传入)

    绑定方法分为两类:

        1.绑定给对象方法

            在类内部定义的函数(没有被任何封装器修饰的),默认就是绑定给对象用的

        2.绑定给函数的方法:

            在类内部定义的函数如果被装饰器@classmethod装饰,

                那么则是绑定给类的,应该由类来调用,类来调用就自动将类当做第一个参数自动传入

 

2.非绑定方法

    类中定义的函数如果被装饰器@staticmethod装饰,那么该函数就变成非绑定方法

    既不与类绑定,也不与对象绑定,意味着类与对象都可以来调用

    但是无论谁来调用,都没有任何自动传值的效果,就是一个普通的函数

 

3.应用

    如果函数体代码需要用外部传入的类,则应该将该函数定义为绑定给类的方法

    如果函数体代码需要用外部传入的对象,则应该将该函数定义成绑定给对象的方法

    如果函数体代码既不需要外部传入的类,也不需要外部传入的对象,则应该将该函数定义成非绑定方法/普通函数

class Foo:
    @classmethod
    def f1(cls):
        print(cls)

    def f2(self):
        print(self)


obj=Foo()
# Foo.f1()
# obj.f1()

# print(Foo.f1())

# Foo.f1()
# print(Foo)


# 1、f1绑定给类的
# 了解:绑定给类的应该由类来调用,但对象其实也可以使用,只不过自动传入的仍然是类
print(Foo.f1)
print(obj.f1)
Foo.f1()
obj.f1()

# 2、f2是绑定给对象的
# obj.f2()              #f2函数默认绑定对象的
# Foo.f2(1)             #类要用的话只能当做普通函数使用,该传几个值就传几个值

 

 

两种实例化方式

1.默认的方式,都绑定给对象使用

2.类绑定函数,根据自动传值特性,传个类给函数,在函数体内再以调用类的方式而产生对象            #主要用于导入文件配置

import settings
import uuid

class Mysql:
    def __init__(self,ip,port):
        self.uid=self.create_uid()
        self.ip=ip
        self.port=port

    def tell_info(self):
        print('%s:%s' %(self.ip,self.port))

    @classmethod
    def from_conf(cls):
        return cls(settings.IP, settings.PORT)                          #绑定类一般都是用来导入配置文件的

    @staticmethod
    def func(x,y):
        print('不与任何人绑定')						#不与任何人绑定,那谁都可以当成普通函数调用

    @staticmethod
    def create_uid():
        return uuid.uuid1()						##不与任何人绑定,那谁都可以当成普通函数调用

# 默认的实例化方式:类名(..)
obj=Mysql('10.10.0.9',3307)

# 一种新的实例化方式:从配置文件中读取配置完成实例化
# obj1=Mysql.from_conf()
# obj1.tell_info()

# obj.func(1,2)
# Mysql.func(3,4)
# print(obj.func)
# print(Mysql.func)

print(obj.uid)  @classmethod
    def from_conf(cls):
        return cls(settings.IP, settings.PORT)                          #绑定类一般都是用来导入配置文件的

    @staticmethod
    def func(x,y):
        print('不与任何人绑定')						#不与任何人绑定,那谁都可以当成普通函数调用

    @staticmethod
    def create_uid():
        return uuid.uuid1()						##不与任何人绑定,那谁都可以当成普通函数调用

# 默认的实例化方式:类名(..)
obj=Mysql('10.10.0.9',3307)

# 一种新的实例化方式:从配置文件中读取配置完成实例化
# obj1=Mysql.from_conf()
# obj1.tell_info()

# obj.func(1,2)
# Mysql.func(3,4)
# print(obj.func)
# print(Mysql.func)

print(obj.uid)

 

posted @ 2018-06-29 14:56  Marcki  阅读(150)  评论(0编辑  收藏  举报