小总结:

面向对象的好处

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

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

   多态:接口的继承

  定义:

   类  :  模板

  对象 :  实例化的类

  属性:私有属性 __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. 转载:《TypeScript 中文入门教程》 8、函数

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 函数是JavaScript应用程序的基础. 它帮助你实现抽象层,模拟类,信息隐藏 ...

  2. a标签 不触发 目标链接

    1. a 标签 点击时 页面回调转到href制定的页面 <a href="www.baidu.com">go to baidu</a> 2. 加上oncli ...

  3. 001.Getting Started -- 【入门指南】

    Getting Started 入门指南 662 of 756 people found this helpful Meng.Net 自译 1. Install .NET Core 到官网安装 .NE ...

  4. Thinkcmf:页面常用函数

    Thinkcmf:页面常用函数 全站seo: 文章列表: {$site_seo_title}        <!--SEO标题--> {$site_seo_keywords}   < ...

  5. Cropper – 简单的 jQuery 图片裁剪插件

    Cropper 是一个简单的 jQuery 图像裁剪插件.它支持选项,方法,事件,触摸(移动),缩放,旋转.输出的裁剪数据基于原始图像大小,这样你就可以用它们来直接裁剪图像. 如果你尝试裁剪跨域图像, ...

  6. jquery如何实现(textarea) placeholder自动换行?

    思路:利用文本框的聚焦和失焦事件 1.HTML结构 <textarea id="text1"></textarea> 2.js方法 <script&g ...

  7. 轻松掌握:JavaScript组合模式

    组合模式 组合模式:将一组对象组合成树形结构,并统一对待组合对象和叶对象,忽略它们之间的不同(因为叶对象也可以也可以包含叶对象而成为组合对象),组合模式中的对象只能是一对多的关系,不能出现多对一. 基 ...

  8. ListDefinition Tips

    1)ListTemplate.Type位数不能太长(最长7位),否则启用内容类型后,列表设置中会抛异常. <ListTemplate Name="List1" Type=&q ...

  9. JAVA静态代理模式(从现实生活角度理解代码原理)

    代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问. 代理模式说白了就是"真实对象"的代表,在访问对象时引入一定程度的间接性,因为这种间接性可以附加多种用途. 在 ...

  10. Wireshark设置interface 时提示“There are no interfaces on which a capture can be done ”

    Wireshark设置interface 时提示“There are no interfaces on which a capture can be done ” 解决方法: 今天在电脑上安装了WIR ...