zoukankan      html  css  js  c++  java
  • 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:非绑定方法




    """
  • 相关阅读:
    当苹果因为UIDevice、udid、uniqueIdentifier而把我们的应用拒之门外invalid binary的时候,呕心沥血解决方法啊
    IOS 7 自定义的UIAlertView不能在iOS7上正常显示
    IOS7 新特性(针对同样讨厌更新后IOS7的开发者)
    CFBundleVersion与CFBundleShortVersionString
    iOS 7 SDK: 如何使用后台获取(Background Fetch)
    IOS开发经验总结(二)
    iOS开发经验总结(一)
    让iOS应用支持不同版本的系统与设备
    控制iOS 7中的状态栏
    Implement CGLIB in ABAP
  • 原文地址:https://www.cnblogs.com/jxl123/p/9516981.html
Copyright © 2011-2022 走看看