面向对象技术简介
类, 面向对象一个很重要的载体
1. 类的定义
class StuentName(object):
pass
类里面一般都是由很多函数组成,函数的第一个参数默认都是self
如果需要全局变量,就在类的内部直接定义类的内部在调用函数或者调用变量的时候,必须使用self.变量 或者self.函数
self 代表的是类实例化以后的个体
4.类的实例化:
实例化类的首字母小写作为实例,然后类实例化
studentName = StudentName();
5. 构造器:
类的构造器,就是类在初始化的时候,首先,必须要执行的函数
6. 继承: 即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟”是一个(is-a)”关系(例图,Dog是一个Animal)。
创建类
使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:
class ClassName:
'类的帮助信息' #类文档字符串
class_suite #类体
以下为一个简单类的例子
class A(object):
name = "ajing"
def hello(self):
print("hello {0}".format(self.name))
def test(self):
self.hello()
print("This is test.")
a = A()
b = A()
构造器:
类的构造器,就是类初始化要执行的函数。
class A(object):
#
def __init__(self, name):
self.name = name
print("init class A")
def hello(self):
print("hello {0}".format(self.name))
a = A("ajing")
a.hello()
类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
class A: # 定义类 A
.....
class B: # 定义类 B
.....
class C(A, B): # 继承类 A 和 B
方法重写
如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Parent(object): # 定义父类
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)的变量, 只能是允许这个类本身进行访问了。