• python基础-类与对象(2)


    pytyhon基础——类与对象(1)
    点击即可访问(在另一篇文章中)
    一、对象
    二、面向对象(oop)
    三、类的详解
    1.类简介:
    2.类的创建
    3.类的继承
    4.类的封装

    四、类的继承与重写

    1.继承

     继承是面向对象三大特性之一
    - 通过继承我们可以使用一个类获取到其他类中的属性和方法
    - 在定义类时,可以在类名后的括号中指定当前类的父类(超类、基类、super)
    - 子类(衍生类)可以直接继承父类中的所有的属性和方法
    注意事项:
      a.在创建类时,如果省略了父类,则默认父类为object, object是所有类的父类,所有类都继承自object。
      b. isinstance()用来检查一个对象是否是一个类的实例
    

    如果这个类是这个对象的父类,也会返回True
    所有的对象都是object的实例

    2.多重继承

    在Python中是支持多重继承的,也就是我们可以为一个类同时指定多个父类
    可以在类名的()后边添加多个类,来实现多重继承
    多重继承,会使子类同时拥有多个父类,并且会获取到所有父类中的方法
    如果多个父类中有同名的方法,则会现在第一个父类中寻找,然后找第二个,然后找第三个。。。前边父类的方法会覆盖后边父类的方法。
    注意:
    类名.__bases__ 这个属性可以用来获取当前类的所有父类    
    

    多重继承示例:

    
    class A(object):
        def test(self):
            print('AAA')
    
    class B(object):
        def test(self):
            print('B中的test()方法~~')
    
        def test2(self):
            print('BBB') 
    
    class C(A,B):
        pass
    c = C()
    c.test()
    
    # 执行结果:AAA
    

    查询流程图
    在这里插入图片描述

    3.重写

    在调用流程中我们会发现有先使用本地的方法和属性,我们可以在子类中重写父类中定义过的方法。
    在子类中定义的方法,父类中相同方法不调用,即达成重写的目的。 
    

    五、类的多态

    多态是面向对象的三大特征之一
    一个对象可以以不同的形态去呈现
     多态 不同的 子类对象 调用相同的 父类方法,产生不同的执行结果
    
    多态优势:
     可以 增加代码的灵活度
    以 继承 和 重写父类方法 为前提
    是调用方法的技巧,不会影响到类的内部设计
    

    链接:
    面向对象的三大特征:
    封装 - 确保对象中的数据安全
    继承 - 保证了对象的可扩展性
    多态 - 保证了程序的灵活性

    六、特殊方法

    ↑↑ 点击上方查看特殊方法详解:谷歌浏览器可以直接翻译成中文 ↑↑
    特殊方法:也称为魔术方法
    特殊方法都是使用__开头和结尾的
    特殊方法一般不需要我们手动调用,需要在一些特殊情况下自动执行

    # 常用的两个特殊方法对比:
    # 定义一个Person类
    class Person(object):
        """人类"""
        def __init__(self, name , age):
            self.name = name
            self.age = age
    #__str__()这个特殊方法会在尝试将对象转换为字符串的时候调用
    # 它的作用可以用来指定对象转换为字符串的结果  (print函数)  
     def __str__(self):
            return 'Person [name=%s , age=%d]'%(self.name,self.age)        
     # __repr__()这个特殊方法会在对当前对象使用repr()函数时调用
     # 它的作用是指定对象在 ‘交互模式’中直接输出的效果    
     def __repr__(self):
            return 'Hello'        
    
    

    常见计算的特殊方法:

    object.__add__(self, other)
        # object.__sub__(self, other)
        # object.__mul__(self, other)
        # object.__matmul__(self, other)
        # object.__truediv__(self, other)
        # object.__floordiv__(self, other)
        # object.__mod__(self, other)
        # object.__divmod__(self, other)
        # object.__pow__(self, other[, modulo])
        # object.__lshift__(self, other)
        # object.__rshift__(self, other)
        # object.__and__(self, other)
        # object.__xor__(self, other)
        # object.__or__(self, other)
    
        # object.__lt__(self, other) 小于 <
        # object.__le__(self, other) 小于等于 <=
        # object.__eq__(self, other) 等于 ==
        # object.__ne__(self, other) 不等于 !=
        # object.__gt__(self, other) 大于 >
        # object.__ge__(self, other) 大于等于 >= 
    

    七、属性和方法总结

    # 定义一个类
    class A(object):
    
    #类属性
    #实例属性
    # 类方法
    # 实例方法
    # 静态方法
    
        # 类属性,直接在类中定义的属性是类属性
        #   类属性可以通过类或类的实例访问到
        #   但是类属性只能通过类对象来修改,无法通过实例对象修改
        count = 0
    
        def __init__(self):
            # 实例属性,通过实例对象添加的属性属于实例属性
            #   实例属性只能通过实例对象来访问和修改,类对象无法访问修改
            self.name = '嘻嘻哈哈'
    
        # 实例方法
        #   在类中定义,以self为第一个参数的方法都是实例方法
        #   实例方法在调用时,Python会将调用对象作为self传入  
        #   实例方法可以通过实例和类去调用
        #       当通过实例调用时,会自动将当前调用对象作为self传入
        #       当通过类调用时,不会自动传递self,此时我们必须手动传递self
        def test(self):
            print('这是test方法~~~ ' , self)    
    
        # 类方法    
        # 在类内部使用 @classmethod 来修饰的方法属于类方法
        # 类方法的第一个参数是cls,也会被自动传递,cls就是当前的类对象
        #   类方法和实例方法的区别,实例方法的第一个参数是self,而类方法的第一个参数是cls
        #   类方法可以通过类去调用,也可以通过实例调用,没有区别
        @classmethod
        def test_2(cls):
            print('这是test_2方法,他是一个类方法~~~ ',cls)
            print(cls.count)
    
        # 静态方法
        # 在类中使用 @staticmethod 来修饰的方法属于静态方法  
        # 静态方法不需要指定任何的默认参数,静态方法可以通过类和实例去调用  
        # 静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
        # 静态方法一般都是一些工具方法,和当前类无关
        @staticmethod
        def test_3():
            print('test_3执行了~~~')
    
  • 相关阅读:
    MySQL--字符集参数
    MySQL--字符集基础
    Cassandra基础2
    Cassandra基础
    Cassandra -- Cassandra 3.0版本安装
    Cassandra Demo--Python操作cassandra
    MySQL--批量插入导致自增跳号问题
    MySQL Disk--SSD和HDD的性能
    MySQL Lock--并发插入导致的死锁
    TCL-视图
  • 原文地址:https://www.cnblogs.com/tianyao2020/p/12755242.html
Copyright © 2020-2023  润新知