python-面向对象进阶
小总结:
面向对象的好处
更容易扩展,提高代码的使用效率,使代码组织性更强、更清晰,更适合复杂项目的开发
封装:把功能的实现细节封装起来,之暴露调用接口
多态:接口的继承
定义:
类 : 模板
对象 : 实例化的类
属性:私有属性 __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-面向对象进阶的更多相关文章
- Python面向对象进阶(二)
Python面向对象进阶2.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,.1 ...
- Python开发【第七篇】:面向对象 和 python面向对象进阶篇(下)
Python开发[第七篇]:面向对象 详见:<Python之路[第五篇]:面向对象及相关> python 面向对象(进阶篇) 上一篇<Python 面向对象(初级篇)> ...
- Python面向对象进阶和socket网络编程-day08
写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...
- Python面向对象进阶和socket网络编程
写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self ...
- python面向对象进阶(八)
上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python面向对象进阶
前言 上节大话python面向对象对面向对象有了一些了解,这次就不用大话风格了 (ps:真心不好扯啊) isinstance与issubclass isinstance(obj,cls)检查是否obj ...
- python 面向对象进阶之内置方法
一 isinstance(obj,cls)和issubclass(sub,super) 1.1,isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(obj ...
- Python 面向对象 (进阶篇)
<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可 ...
- Python之路-python(面向对象进阶)
一.面向对象高级语法部分 1.静态方法.类方法.属性方法 2.类的特殊方法 3.反射 二.异常处理 三.Socket开发基础 一.面向对象高级语法部分 静态方法(@staticmethod) 定义:只 ...
- Python学习笔记【第十篇】:Python面向对象进阶
保护对象的属性 如果有一个对象,当需要对其进行修改属性时,有2种方法 对象名.属性名 = 数据 ---->直接修改 对象名.方法名() ---->间接修改 为了更好的保存属性安全,即不能随 ...
随机推荐
- [moka同学笔记]关于api-ms-win-crt-runtimel1-1-0.dll缺失
在搞mongodb时候,碰到了这个坑.[api-ms-win-crt-runtimel1-1-0.dll缺失],懵逼不知道怎么改,从同事电脑里拷贝了这个文件,也按照网上的办法改了,改了半天还是不行.最 ...
- php实现设计模式之 装饰模式
<?php /* * 装饰模式:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. * * 角色 * 抽象构件(Compone ...
- 关于java中接口定义常量和类定义常量的区别
/** * * @author YZJ * @Description java中定义常量的最佳方法 */ public final class Contants{ /** * @Description ...
- SpringMVC基本使用
springMVC是一个MVC框架,他控制着请求相应的整个流程,从请求一进入到应用服务器到相应离开,都离不开mvc框架 请求在应用服务器中 先说说请求相应在应用服务器的整个过程 DisptacherS ...
- [ASP.NET Core] Static File Middleware
前言 本篇文章介绍ASP.NET Core里,用来处理静态档案的Middleware,为自己留个纪录也希望能帮助到有需要的开发人员. ASP.NET Core官网 结构 一个Web站台最基本的功能,就 ...
- Javascript 创建对象方法的总结
最近看了一下<Javascript高级程序设计(第三版)>,这本书很多人都推荐,我也再次郑重推荐一下.看过之后总得总结一下吧,于是我选了这么一个主题分享给大家. 使用Javascript创 ...
- canvas绘制经典折线图(一)
最终效果图如下: 实现步骤如下:注-引用了jQuery HTML代码 <!doctype html> <html lang="en"> <head&g ...
- CyclicBarrier ------仿真赛马游戏
import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent ...
- Sass初使用
看慕课网materliu前辈的sass教程,http://www.imooc.com/learn/364.顺便把刚做完的项目重构一下,然后把一些笔记和心得都写在这里~ 首先安装sass,这里直接参考 ...
- iOS开发-UI 从入门到精通(二)
iOS开发-UI 从入门到精通(二)是对 iOS开发-UI 从入门到精通(一)知识点的巩固,主要以习题练习为主,增强实战经验,为以后做开发打下坚实的基础! ※开发环境和注意事项: 1.前期iOS-UI ...