12 面向对象三大特征

发布时间 2023-09-16 20:03:29作者: yiyi&jojo
  • 1 封装:提高程序的安全性。
    将数据 (属性) 和行为 (方法) 包装到类对象中。在方法内部对属性进行操作,在类对象的外部调用方法。
    在Python中没有专门的修饰符用于属性的私有,如果该属性不希望在类访问,前边使用两个‘____’。
  • 2 继承:提高代码的复用性。
    语法格式:class 子类类名(父类1,父类2,...):
    如果一个类没有继承任何类,则默认继承object;
    Python支持多继承;
    定义子类时,必须在其构造函数中调用父类的构造函数。
    方法重写:
    如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其(方法体)进行重新编写;
    子类重写后的方法中可以通过super().xxx0调用父类中被重写的方法
    plaintext # 方法重写 def info(self): super().info() # 调用父类被重写的方法 print('\t学号:{}'.format(self.stuNo))
  • 3 多态:提高程序的可扩展性和可维护性。简单地说,即便不知道对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象的方法。
  • 4 特殊方法和特殊属性
       print(c.__dict__)  # 实例对象的属性字典
       print(C.__dict__)
       print('-'.center(20, '*'))
       print(c.__class__)  # <class '__main__.C'>输出了对象所属的类
       print(C.__bases__)  # C类的父类类型的元素
       print(C.__base__)   # 类的基类
       print(C.__mro__)    # C的层次结构
       print(A.__subclasses__())   # 子类列表
    
        class Student:
          def __init__(self, name):
            self.name = name
          def __add__(self, other):
            return self.name+'\t'+other.name
        stu1 = Student('Jack')
        stu2 = Student('Tom')
        print(stu1 + stu2)  # 实现了两个对象的加法(在Student类中 重新编写__add__()特殊的方法)
        print(stu1.__add__(stu2))
      ```