小总结:

面向对象的好处

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

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

   多态:接口的继承

  定义:

   类  :  模板

  对象 :  实例化的类

  属性:私有属性 __private

  公有属性   存在类中的变量

  成员属性   实例变量

  方法 :函数

  构造函数:

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

新式类VS经典类:

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

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

一、抽象接口:    

 class Alert(object):
'''报警类'''
def send(self):
raise NotImplementedError
class MailAlert(Alert):
def send(self,msg):
print('_____sending:',msg)
class SMSAlert:
pass
m=MailAlert()
m.send('ooooooooooooooooo')

二、类方法:

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

 class Person(object):
id=''
def __init__(self,name):
self.name=name
@staticmethod
def eat(name):
print('%s is eating...'%name)
@classmethod
def h(self):
print('%s'%(self.id))
#不需要实例化直接通过类调用
Person.eat('eeeeeeeeeee')
p=Person('song') #类方法只能调用公有属性,不嗯给你调用成员属性和私有属性
p.h()

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

三、属性方法

把一个方法变成一个变量

 class Person(object):
id=''
def __init__(self,name):
self.name=name
@property
def talk(self):
print('%s say'%self.name)
p=Person('songxiaonan')
# p.talk() #报错
p.talk # songxiaonan say

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

 class Person(object):
id=''
def __init__(self,name):
self.name=name
@property
def talk(self):
print('%s say'%self.name)
@talk.setter
def talk(self,msg):
print('talk %s'%msg)
p=Person('songxiaonan')
# p.talk() #报错
p.talk # songxiaonan say p.talk调用的是第一个talk
p.talk='ahahhahhahahaha' #talk ahahhahhahahaha p.talk=值 就是调用的第二个talk

删除变量   @talk.deleter

 class Person(object):
id=''
def __init__(self,name):
self.name=name
@property
def talk(self):
print('%s say'%self.name)
@talk.setter
def talk(self,msg):
print('talk %s'%msg)
@talk.deleter
def talk(self,msg):
print('delete.....')
   del p.talk

四、类的其他特殊方法

 class Animal(object):
country='BeiJing'
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self): # 定制实例的返回结果
return '%s——%s'%(self.name,self.age) A = Animal('CAT', '')
print(A.__dict__) # 打印实例的属性 {'name': 'CAT', 'age': '12'}
print(A.__module__) # 打印实例所在的模块 __main__
print(A.__class__) # 打印实例所在的类 <class '__main__.Animal'>
print(A) # CAT——12

python-面向对象进阶的更多相关文章

  1. Python面向对象进阶(二)

    Python面向对象进阶2.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1 ...

  2. Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)

    Python开发[第七篇]:面向对象   详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇)   上一篇<Python 面向对象(初级篇)> ...

  3. Python面向对象进阶和socket网络编程-day08

    写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...

  4. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self ...

  5. python面向对象进阶(八)

    上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  6. python面向对象进阶

    前言 上节大话python面向对象对面向对象有了一些了解,这次就不用大话风格了 (ps:真心不好扯啊) isinstance与issubclass isinstance(obj,cls)检查是否obj ...

  7. python 面向对象进阶之内置方法

    一 isinstance(obj,cls)和issubclass(sub,super) 1.1,isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(obj ...

  8. Python 面向对象 (进阶篇)

    <Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可 ...

  9. Python之路-python(面向对象进阶)

    一.面向对象高级语法部分 1.静态方法.类方法.属性方法 2.类的特殊方法 3.反射 二.异常处理 三.Socket开发基础 一.面向对象高级语法部分 静态方法(@staticmethod) 定义:只 ...

  10. Python学习笔记【第十篇】:Python面向对象进阶

    保护对象的属性 如果有一个对象,当需要对其进行修改属性时,有2种方法 对象名.属性名 = 数据 ---->直接修改 对象名.方法名() ---->间接修改 为了更好的保存属性安全,即不能随 ...

随机推荐

  1. Session中load/get方法的详细区别

    Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区别在于: 如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个O ...

  2. PHP7 redis扩展安装

    1.安装redis (1)下载:https://github.com/phpredis/phpredis/tree/php7 或下载http://pan.baidu.com/s/1i5DFrjn用sa ...

  3. maven引入的jar带了时间戳

    正常情况下,我们引入的第三方jar一般都是类似spider-1.0.5-SNAPSHOT.jar的名称,但是有些环境下,我们引入的三方jar会带上了时间戳,如下所示: spider-1.0.5-201 ...

  4. 移动H5前端性能优化指南

    移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...

  5. Easticsearch通信方式_API

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch概念 a. Elasticsearch是一个基于Luc ...

  6. C#变量、输入、数据类型的自动转换

  7. jQuery介绍 DOM对象和jQuery对象的转换与区别

    jQuery介绍 DOM对象和jQuery对象的转换与区别 jQuery介绍      jQuery: http://jquery.com/      write less, do more.   j ...

  8. android性能优化练习:过度绘制

    练习:https://github.com/zhangbz/AndroidUIPorblems 查看过度绘制 在开发者选项中开启"调试GPU过度绘制" 判断标准 无色:没有过度绘制 ...

  9. Java避免创建不必要的对象

    小Alan最近看到了<Effective Java>这本书,这本书包含的内容非常丰富,这本书我就不多介绍了,只能默默的说一句,作为一名java开发错过了这本书难免会成为一个小遗憾,所以还是 ...

  10. SqlServer--查询案例

    use  MyDataBase1 -- * 表示显示所有列 -- 查询语句没有加where条件表示查询所有行 select *from TblStudent ---只查询表中的部分列 select t ...