# --> ''' Monthly Summary 04.23.2019 面向对象 (界门纲目科属种) # --( )------------------------------------------------------------------------------------------------ 1.类与对象 对象是特征与技能的结合体,即数据与方法 类是一系列对象(相似)的特征与技能的结合体,即(相似)的数据与方法 2.面向对象的三大特征 封装: 把一堆数据属性与方法属性整合到对象里面 隐藏: __ 隐藏掉属性 继承: 父类是一系列共有数据属性与方法属性的结合体 子类可以继承父类的属性,还可以派生出自己独有的属性 组合: 继承的一种应用,继承父类的属性,不与父类耦合到一起 把一个对象放到另一个对象里面 多态: 1.抽象类 2.鸭子类型 3.绑定方法 给对象用的,由对象来调用,会自动把对象本身当作第一个参数传给self 4.类内置装饰器 @classmethod 绑定给类的方法,对象也可以调用 @staticmethod 非绑定方法,谁都不绑定,都可以调用 @property (.getter 外界可查)(.setter 外界可改)(.deleter 外界可删) 5.面向对象高级 attr ibute(属性) 1.属性 通过 str字符串 来操作类与对象的属性 hasattr 判断对象或者类的属性是否存在 getattr 获取对象或者类的属性 参数 (对象object,str‘属性名’,默认值default) setattr 设置对象或者类的属性 delattr 删除对象或者类的属性 2.类的内置方法 __init__():调用自动触发,初始化 __str__():打印对象的时候用此方法,必须return一个字符串 __del__():在对象占用空间被清掉时,会自动出发__del__方法的执行 __setattr__(self,Key,value):修改对象的属性时,会自动触发,初始实例化对象时也会自动触发 __delattr__(self,Key,value):删除对象时会自动触发 __call__():调用对象时会自动触发 ''' --( 面向过程 )------------------------------------------------------------------------------------------------ 思想:核心是过程,是解决问题的步骤,前后顺序 基于该编程思想编写程序,相当于一条流水线,机械思维方式。 --( 面向对象 )------------------------------------------------------------------------------------------------ 思想:核心是对象,是数据与方法的结合体。可理解为容器 基于该编程思想编写程序,就好比创造世界,上帝式思维方式。 --( 2.面向对象的三大特征 )------------------------------------------------------------------------------------------------ --( 组合案例 )------------------------------------------------------------------------------------------------ 类与类之间不想耦合,即可以用组合,继承和组合不可混用 class Course: def __init__(self,x): self.x = x class Student: def __init__(self,name,sex,age): self.name = name self.sex = sex self.age = age self.course = [] course_1 = Course('python') student = Student('Max',24,'male') student.course.append(course_1.x) print(student.course) ['python'] --( 4.类内置装饰器 )------------------------------------------------------------------------------------------------ --( @classmethod )------------------------------------------------------------------------------------------------ class OldboyMembers(): def __init__(self,sex,age): self.sex = sex self.age = age @classmethod def obm_sex(self): print('qqqqqqqqqqqqqqqqqqqqqqqq') # @property def obm_age(self): return self.age p =OldboyMembers('111',24) print(p.obm_age) print(OldboyMembers.obm_sex()) --( setattr hasattr getattr delattr )------------------------------------------------------------------------------------------------ --( 增改 查 查了用 删 )------------------------------------------------------------------------------------------------ class People: school = 'oldboy' def __init__(self,name): self.name = name p = People('tank') hastter print(hasattr(p, 'school')) # True print(hasattr(p, 'schooo')) # False getattr print(getattr(p, 'name','默认值')) # tank print(getattr(p, 'NAME','默认值')) # 默认值 setattr setattr(p,'age',18) print(p.age) # 18 delattr print(hasattr(p, 'name')) # True print(delattr(p, 'name')) # None