python3 面向对象详解_Python3面向对象
创建类
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Employee:
'所有员工的基类'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。
第一种方法 __init__() 方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
创建实例对象
"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
访问属性
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount
添加,删除,修改及访问类的属性
emp1.age = 7 # 添加一个 'age' 属性
emp1.age = 8 # 修改 'age' 属性
del emp1.age # 删除 'age' 属性
# 你也可以使用以下函数的方式来访问属性:
hasattr(emp1, 'age') # 如果存在 'age' 属性返回 True。
getattr(emp1, 'age') # 返回 'age' 属性的值
setattr(emp1, 'age', 8) # 添加属性 'age' 值为 8
delattr(emp1, 'age') # 删除属性 'age'
Python内置类属性
__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
__doc__ :类的文档字符串
__name__: 类名
__module__: 类定义所在的模块(类的全名是 '__main__.className',如果类位于一个导入模块mymod中,那么 className.__module__ 等于 mymod)
bases : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
析构函数
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Point:
def __init__( self, x=0, y=0):
self.x = x
self.y = y
def __del__(self):
class_name = self.__class__.__name__
print class_name, "销毁"
pt1 = Point()
del pt1 # 销毁对象
类的继承
语法:
派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后,如下所示:
class SubClassName (ParentClass1[, ParentClass2, ...]):
...
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Parent: # 定义父类
parentAttr = 100
def __init__(self):
print "调用父类构造函数"
def parentMethod(self):
print '调用父类方法'
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print "父类属性 :", Parent.parentAttr
class Child(Parent): # 定义子类
def __init__(self):
print "调用子类构造方法"
def childMethod(self):
print '调用子类方法'
c = Child() # 实例化子类
c.childMethod() # 调用子类的方法
c.parentMethod() # 调用父类方法
c.setAttr(200) # 再次调用父类的方法 - 设置属性值
c.getAttr() # 再次调用父类的方法 - 获取属性值
方法重写
如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Parent: # 定义父类
def myMethod(self):
print '调用父类方法'
class Child(Parent): # 定义子类
def myMethod(self):
print '调用子类方法'
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
类属性与方法
类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs
类的方法
在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
类的私有方法
_private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods
实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class JustCounter:
__secretCount = 0 # 私有变量
publicCount = 0 # 公开变量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print self.__secretCount
counter = JustCounter()
counter.count()
counter.count()
print counter.publicCount
print counter.__secretCount # 报错,实例不能访问私有变量
单下划线、双下划线、头尾双下划线说明
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
python3 面向对象详解_Python3面向对象相关推荐
- python3字典详解_Python3字典操作详解 Python3字典操作大全
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:sking #Python3字典操作详解 Python3字典操作大全 #字典是无序的(因为它 ...
- python3字典详解_Python3实现的字典遍历操作详解
本文实例讲述了Python3字典遍历操作.分享给大家供大家参考,具体如下: 字典是针对非序列集合而提供的一种数据类型. 通过任意键查找集合中值信息的过程叫映射,python通过字典实现映射. 为字典赋 ...
- python3字典详解_python3中字典详解
字典(dict) 1. 创建字典的几种方式 class dict(**kwarg) class dict(mapping, **kwarg) class dict(iterable, **kwarg) ...
- python3字典详解_Python3中Dictionary(字典)操作详解
在绝大部分的开发语言中与实际开发过程中,Dictionary扮演着举足轻重的角色.从我们的数据模型到服务器返回的参数到数据库的应用等等,Dictionary的身影无处不在.那么,在Python中,Di ...
- php开发面试题---php面向对象详解(对象的主要三个特性)
php开发面试题---php面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...
- 【LOL DOTA】面向对象详解
[LOL && DOTA]面向对象详解 文章目录 [LOL && DOTA]面向对象详解 一.设计英雄类class 二.创建具体的英雄 相信你肯定玩过DOTA或者LOL ...
- C++学习笔记章节中 面向对象详解
C++ 类&对象 C++类定义 本质上是一个数据类型的蓝图,定义了类的对象包含的信息,以及可以在这个类对象上执行哪些操作. 类的定义是以class开头,后面接类的名称. 类的主体是包含在一个花 ...
- javascript 本地对象和内置对象_详解 JavaScript 面向对象
1. 概述 JavaScript面向对象比较难理解的点是类的继承.不管是es5写法还是es6写法,JavaScript继承的本质是原型链.具体可看我的上一篇文章: 田浩:详解原型.原型链.构造函.实例 ...
- 面向对象 详解笔记 方法 类 对象 封装 继承 重写 多态 接口
文章目录 面向过程&面向对象 面向过程 面向对象 什么是面向对象 回顾方法及加深 方法的定义 修饰符 返回类型 break:跳出switch,结束循环和return的区别 方法名:注意规范就o ...
最新文章
- windows模糊查询指定进程是否存在
- xshell下载mysql到本地文件_在Xshell中上传下载文件到本地(linux中从多次ssh登录的dbserver里面的文件夹)-Go语言中文社区...
- OpenCV使用蒙版mask过滤图像的实例(附完整代码)
- 看新排美国话剧《哗变》
- 你与一份好简历之间的距离
- win7关闭休眠_【科普】笔记本电脑,待机/睡眠/休眠有啥区别?(ACPI SPM S0-S5)...
- python里面的数学
- day12 java的方法覆盖(重写)
- X 分钟速成 Python
- modbus通讯失败_你以为你真的了解Modbus 通信协议?
- Java 杨辉三角形
- Qt怎么实现将bmp图片转换成Ascii_你保存的word和pdf文档图片为什么变模糊了?
- lcd改led背光有光斑_So Easy! LCD液晶电视改LED背光,你也可以!
- 2007五一[西北行] - 第二天:延安(窑洞,杨家岭,宝塔山...)
- 用什么软件免费查重呢?4款比较靠谱的论文查重软件值得一试
- 制作简单的指纹图集,并对其进行处理
- 纯净正版 WIN10 安装文件官方下载
- D. Little Girl and Maximum XOR(贪心)
- android 监控行为,一种针对Android系统App行为的监控方法
- AsyncTask的优缺点
热门文章
- oracle isextis,OGG-01052 No recovery is required for target file /ogg/tail_ext/et000000, at...
- P1433 吃奶酪(状压dp)
- 从贝泰妮的全域消费者运营,看Quick Audience如何链接产品服务商生态
- 基于函数计算的游戏打包最佳实践
- Gartner魔力象限到底有何“魔力”?
- 云原生时代,微服务如何演进?
- 自研云原生数据仓库AnalyticDB再破权威评测TPC-DS世界纪录!
- 手机游戏美术外包的四大优点及三大建议
- 聊聊《战魂铭人》的游戏设计
- Linux的java服务配置步骤