day 22

1.绑定方法:绑定给谁就应该给谁来调用,谁来调用就会将谁以第一个参数传入

  绑定给类的方法:为类函数加上一个装饰器classmethod

  绑定给对象的方法:类中定义的函数默认就是绑定给对象的

2.非绑定方法:即不绑定,也不绑定对象,意味着对象和类都可以直接访问函数,无论谁来调用,用的只是一个普通的函数,没有自动传参的效果

# class Foo:
#     def f1(self):
#         print(self)
#
#     @classmethod
#     def f2(cls):
#         print(cls)
#
#     @staticmethod
#     def f3(x,y):
#         print('f3',x+y)
#
#
# obj=Foo()
# # print(obj.f1)
# # obj.f1()
#
# # print(Foo.f2)
# # Foo.f2()
# # print(obj.f2)
# # obj.f2()
#
# print(Foo.f3)
# print(obj.f3)
#
# Foo.f3(1,2)
# obj.f3(3,4)


# 应用
import settings

class MySql:
    def __init__(self, ip, port):
        self.id = self.create_id()
        self.ip = ip
        self.port = port

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

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

    @staticmethod
    def create_id():
        import uuid
        return uuid.uuid4()



# obj1=MySql('1.1.1.1',3306)
# obj1.tell_info()
obj2 = MySql.from_conf()
obj2.tell_info()

面向对象阶段性地总结:

""""
面向过程: 过程:解决问题的步骤
面向对象:对象:技能和特征的结合体
类:一些对象相同的技能和特征的结合体
对象:技能和特征的结合体
类的使用方法:
1.在类体中直接调用 按照普通函数使用
2.通过调用的方式产生一个对象
调用类发生的两个过程:
1.产生一个空的名称空间
2.触发__init__的执行,将对象连同阔括号内的参数一同传入_init__()中
调用类产生的绑定方法:__
属行查找顺序:
继承:是一种新建类的方式,新件的类称之为子类/派生类.被继承的类称之为基类/父类/超类
继承的特点:
子类可以遗传父类的属性
一个子类可以继承对个父类
在继承的背景下,Python中的类分为两种:
新式类:但凡继承了object的类,或其子类都称之为新新式类(在Python中都是新式类)
经典类:没有继承object 的类称之为经典类
派生:
子类在派生的过程中重用父类的方法:
1.指明道姓方法
与继承无关
调用的数函数,必须给其传值
2.super()
在Python2 supper(类的名字,self)
在Python3中 super()
完全依赖继承 参照mro列表
得到的是一个特殊的对象,有自动传值得效果
单继承:查找属性地顺序:对象>类>父类
多继承:
非菱形:从左往右查找,一个分支一个分支的查找
菱形:
新式类:(广度优先查找) 最后一个查找*类
经典类:(深度优先查找) 第一个就直接查找*类

组合:就是一个对象的属性,该属性的值等于另一个类的对象
封装:
装:在名称空间里装名字
封:将类中的名字隐藏起来,这种隐藏对外不对内
如何封装:用__开头(没有__结尾)
只是一种语法意义上的变形,并不会限制类外部的访问(__类名__名字)
在定义阶段检验语法的时候发生一次,此后在定义就不会再发生变形
如果父类不限更让自己的属性被子类覆盖,可以在属性的前面加__
多态:一个事物的不同形态
Python中崇尚鸭子类型:
鸭子类型:是一种动态类型的风格。一个对象有效的语义,
不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。
这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试
1.propeyty:将类中的函数属行伪装成数据属性
2.classmethod:绑定类的方法
3.在类中定义的函数,默认就是绑定给对象的
3.staricmethod:非绑定方法




"""