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种方法 对象名.属性名 = 数据 ---->直接修改 对象名.方法名() ---->间接修改 为了更好的保存属性安全,即不能随 ...
随机推荐
- Session中load/get方法的详细区别
Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区别在于: 如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个O ...
- PHP7 redis扩展安装
1.安装redis (1)下载:https://github.com/phpredis/phpredis/tree/php7 或下载http://pan.baidu.com/s/1i5DFrjn用sa ...
- maven引入的jar带了时间戳
正常情况下,我们引入的第三方jar一般都是类似spider-1.0.5-SNAPSHOT.jar的名称,但是有些环境下,我们引入的三方jar会带上了时间戳,如下所示: spider-1.0.5-201 ...
- 移动H5前端性能优化指南
移动H5前端性能优化指南 概述 1. PC优化手段在Mobile侧同样适用2. 在Mobile侧我们提出三秒种渲染完成首屏指标3. 基于第二点,首屏加载3秒完成或使用Loading4. 基于联通3G网 ...
- Easticsearch通信方式_API
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch概念 a. Elasticsearch是一个基于Luc ...
- C#变量、输入、数据类型的自动转换
- jQuery介绍 DOM对象和jQuery对象的转换与区别
jQuery介绍 DOM对象和jQuery对象的转换与区别 jQuery介绍 jQuery: http://jquery.com/ write less, do more. j ...
- android性能优化练习:过度绘制
练习:https://github.com/zhangbz/AndroidUIPorblems 查看过度绘制 在开发者选项中开启"调试GPU过度绘制" 判断标准 无色:没有过度绘制 ...
- Java避免创建不必要的对象
小Alan最近看到了<Effective Java>这本书,这本书包含的内容非常丰富,这本书我就不多介绍了,只能默默的说一句,作为一名java开发错过了这本书难免会成为一个小遗憾,所以还是 ...
- SqlServer--查询案例
use MyDataBase1 -- * 表示显示所有列 -- 查询语句没有加where条件表示查询所有行 select *from TblStudent ---只查询表中的部分列 select t ...