python面向对象
Posted 愤怒的绿萝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python面向对象相关的知识,希望对你有一定的参考价值。
python面向对象
python设计之初就是一门面向对象的语言
面向对象技术简介:
类class:描述具有相同的属性和方法的对象的集合
类变量:类变量在整个实例化的对象中是公用的
数据成员:类变量或者实例变量,用于处理类及实例对象的相关数据
方法重写:如果从父类继承的方法不能满足子类的需求,对其进行改写,这个过程叫方法的覆盖
实例变量:定义在方法中的变量,只作用于当前实例的类
继承:
实例化:创建一个类的实例,类的具体对象
方法:类中定义的函数
对象:通过类定义的数据结构实例
创建类:
用class语句来创建一个类,class之后为类的名称并以冒号结尾
class ClassName:
"""类帮助信息"""
Class_suite
类的帮助信息可以通过ClassName.__doc__查看
#!/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变量是一个类变量
__init__是一种特殊的方法,类的构造函数或者初始化方法
self代表类的实例,self在定义类的时候是必须有的,代表当前对象的地址,self。class则指向类
self不是关键字,换成其他的也可以
创建实例对象:
实例化类在其他编程语言中一般使用new关键字,在python中类的实例化类似函数调用
访问属性:
可以使用.来访问对象的属性
可以通过一下函数的访问来访问属性:(反射)
getattr(obj, name[,default]):访问对象的属性
hasattr(obj, name):检查是否存在一个属性
setattr(obj, name):添加属性
delattr(obj, name):删除属性
python内置属性:
__dict__:类的属性(包含一个字段,又类的数据属性组成) __doc__:类的文档字符串 __name__:类名 __module__:类定义所在的模块,(类的全名是\'__main__.className\',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod) __bases__:类的所有父类组成的元素
python对象销毁(垃圾回收)
python使用了引用技术这一简单技术来跟踪和回收垃圾
在python内部记录这所有使用中的对象各有多少引用
一个内部跟踪变量,成为一个引用计数器
当对象被创建时,就创建一个引用计数,当这个对象不再需要,这个对象的引用计数为0时,被回收
回收不是立即的,由计时器在适当的时机,进行对象的内存回收
类的继承:
面向对象的编程最主要好处之一就是代码的重用,重用方法之一通过继承机制
class 派生类名(基类名)
....
1.如果在子类中需要父类的构造方法就需要显示的调用父类的构造方法,
2.在调用基类的方法时,需要加上基类的类名前缀,且需要加上self参数变量
3.python总是先查找对应类型的方法,如果不能在派生类中找到,才开始基类中查找
issubclass():判断一个类是另一个类的子类或者子孙类, issubclass(sub, sup)
isinstance(obj, Class):如果obj是Class类的实例对象或者是一个class子类的实例对象,返回True
方法重写:如果从父类继承的方法不能满足子类的需求,对其进行改写,这个过程叫方法的覆盖
基础重载方法:
运算符重载:
类属性与方法:
类的私有属性:
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。
类的方法:
在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数
类的私有方法:
__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。
Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性
单下划线、双下划线、头尾双下划线说明:
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。 _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import * __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
以上是关于python面向对象的主要内容,如果未能解决你的问题,请参考以下文章