博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-面向对象进阶
阅读量:4576 次
发布时间:2019-06-08

本文共 2562 字,大约阅读时间需要 8 分钟。

小总结:

     面向对象的好处

       更容易扩展,提高代码的使用效率,使代码组织性更强、更清晰,更适合复杂项目的开发

       封装:把功能的实现细节封装起来,之暴露调用接口

       多态:接口的继承

       定义:

             类  :  模板

             对象 :  实例化的类

             属性:私有属性 __private  

                     公有属性   存在类中的变量

                      成员属性   实例变量

             方法 :函数

             构造函数:

           析构函数:实例被销毁(手动删除变量或者程序结束),调用析构函数

           新式类VS经典类:

                  新式类:继承路径:广度优先  

                  经典类:继承路径:深度优先

 

一、抽象接口:                         

1 class Alert(object): 2     '''报警类''' 3     def send(self): 4         raise NotImplementedError 5 class MailAlert(Alert): 6     def send(self,msg): 7         print('_____sending:',msg) 8 class SMSAlert: 9     pass10 m=MailAlert()11 m.send('ooooooooooooooooo')

 

二、类方法:

     类方法只能访问类的公有属性,不能访问成员属性和私有属性

1 class Person(object): 2     id='11111111111111111' 3     def __init__(self,name): 4         self.name=name 5     @staticmethod 6     def eat(name): 7         print('%s is eating...'%name) 8     @classmethod 9     def h(self):10         print('%s'%(self.id))11 #不需要实例化直接通过类调用12 Person.eat('eeeeeeeeeee')13 p=Person('song')   #类方法只能调用公有属性,不嗯给你调用成员属性和私有属性14 p.h()

    静态方法既不能访问公有属性也不能访问实例属性

 

三、属性方法

      把一个方法变成一个变量

1 class Person(object): 2     id='11111111111111111' 3     def __init__(self,name): 4         self.name=name 5     @property 6     def talk(self): 7         print('%s say'%self.name) 8 p=Person('songxiaonan') 9 # p.talk()   #报错10 p.talk  #  songxiaonan say

      给属性方法变成变量后,给这个变量附一个值    @talk.setter

1 class Person(object): 2     id='11111111111111111' 3     def __init__(self,name): 4         self.name=name 5     @property 6     def talk(self): 7         print('%s say'%self.name) 8     @talk.setter 9     def talk(self,msg):10         print('talk %s'%msg)11 p=Person('songxiaonan')12 # p.talk()   #报错13 p.talk  #  songxiaonan say     p.talk调用的是第一个talk14 p.talk='ahahhahhahahaha'    #talk ahahhahhahahaha    p.talk=值  就是调用的第二个talk

      删除变量   @talk.deleter

1 class Person(object): 2     id='11111111111111111' 3     def __init__(self,name): 4         self.name=name 5     @property 6     def talk(self): 7         print('%s say'%self.name) 8     @talk.setter 9     def talk(self,msg):10         print('talk %s'%msg)11     @talk.deleter12     def talk(self,msg):13         print('delete.....')
del p.talk

 

四、类的其他特殊方法

1 class Animal(object): 2     country='BeiJing' 3     def __init__(self,name,age): 4         self.name=name 5         self.age=age 6     def __str__(self):    #   定制实例的返回结果 7         return '%s——%s'%(self.name,self.age) 8  9 A = Animal('CAT', '12')10 print(A.__dict__)    #   打印实例的属性   {'name': 'CAT', 'age': '12'}11 print(A.__module__)  #   打印实例所在的模块    __main__12 print(A.__class__)   #   打印实例所在的类   
13 print(A) # CAT——12

 

                   

 

转载于:https://www.cnblogs.com/songxiaonan/p/6129519.html

你可能感兴趣的文章
HTML页面之间的参数传递
查看>>
java面试题集锦
查看>>
scikit-learn:4.2.3. Text feature extraction
查看>>
Spring Security构建Rest服务-0800-Spring Security图片验证码
查看>>
AE待整理
查看>>
java8中规范的四大函数式接口
查看>>
分类---Logistic Regression
查看>>
35.Docker安装Mysql挂载Host Volume
查看>>
Ubuntu 英文下Fcitx 无法输入中文
查看>>
Android压力测试命令monkey详解
查看>>
MySQL_入手<二>之删--改--查
查看>>
MySQL创表--分页--自关联--
查看>>
python基础_面向对象进阶
查看>>
GitHub从小白到熟悉<一>
查看>>
测试基础_<一>
查看>>
定义页面加载和导航时要执行的函数/自定义事件
查看>>
rem.js
查看>>
Unslider.js Tiny Sample
查看>>
面向对象内存分析
查看>>
Dijkstra BZOJ2763 [JLOI2011]飞行路线
查看>>