小总结:

面向对象的好处

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

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

   多态:接口的继承

  定义:

   类  :  模板

  对象 :  实例化的类

  属性:私有属性 __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. JAVAWEB贵美网上商城完整项目源码(SSH2)

    JAVAWEB贵美网上商城完整项目源码(SSH2) 贵美网上商城原是北大青鸟的一个内部项目,项目采用 struts2+spring4+hibernate4+MySQL等技术实现,数据库连接池采用c3p ...

  2. svg.js教程及使用手册详解(一)

    做毕设的时候,因为要使用到画图和自定义动画,所以接触到了SVG.网上关于SVG和Canvas的对比很多,具体的辨析这里就不赘言.网上关于SVG的所谓教程基本上都是SVG本身,但是却没有一个针对svg. ...

  3. js无限级树菜单

    以前做网站,树形菜单一般都很简单,自己定义风格样式,简单的js控制,后来原来网上很多文章都在讨论Js树型菜单,看了几个实例,发现这个树比较简单好用. http://hovertree.com/texi ...

  4. ["1", "2", "3"].map(parseInt)?

    ["1", "2", "3"].map(parseInt)得到什么? 答案是:[1, NaN, NaN]. 原因:parseInt接收的是两 ...

  5. git mv 命令 移动或重命名

    最基本的代码: git mv file_old file_new 手册: NAME git-mv - Move or rename a file, a directory, or a symlink ...

  6. jeecg环境搭建20160707

    1.首页修改位置:src/main/webapp/webpage/main 2.tomcat45秒超时启动修改,open打开servers项目,在右上角处的timeouts参数修改: 3.eclips ...

  7. Google C++单元测试框架---Gtest框架简介(译文)

    一.设置一个新的测试项目 在用google test写测试项目之前,需要先编译gtest到library库并将测试与其链接.我们为一些流行的构建系统提供了构建文件: msvc/ for Visual ...

  8. IOS开发基础知识--碎片28

    1:通用的weakify和strongify /** * 强弱引用转换,用于解决代码块(block)与强引用self之间的循环引用问题 * 调用方式: `@weakify_self`实现弱引用转换,` ...

  9. android四大组件之Broadcast

    广播的概念 现实中:我们常常使用电台通过发送广播发布消息,买个收音机,就能收听 Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件.Androi ...

  10. Android 框架学习之 第一天 okhttp & Retrofit

    最近面试,一直被问道新技术新框架,这块是短板,慢慢补吧. 关于框架的学习,分几个步骤 I.框架的使用 II.框架主流使用的版本和Android对应的版本 III.框架的衍生使用比如okhttp就会有R ...