类(Class): 用来描述具有相同的属性和方法的对象的集合。定义了该集合中每个对象所共有的属性和方法。
类变量:在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外,通常不作为实例变量使用。
数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。
方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写。
局部变量:定义在方法中的变量,只作用于当前实例的类。
实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
继承:即一个派生类(derived class)继承基类(base class)的字段和方法。
创建群一个类
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
类的属性
dict : 类的属性(包含一个字典,由类的数据属性组成)
doc :类的文档字符串
name: 类名
module: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
bases : 类的所有父类构成元素(包含了一个由所有父类组成的元组)
私有属性
foo: 定义的是特殊方法,一般是系统定义名字 ,类似 init() 之类的。
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了,字类无法继承
访问私有属性
class Cat():
def __init__(self, name, age):
self.__name = name
self.age = age
if __name__ == '__main__':
cat1 = Cat('喵喵', 22)
print(cat1.age)
print(cat1.name)
上述无法访问会报错,因为 name 是私有属性
class Cat():
def __init__(self, name, age):
self.__name = name
self.age = age
def get_name(self):
return self.__name
if __name__ == '__main__':
cat1 = Cat('喵喵', 22)
print(cat1.age)
print(cat1.get_name())
类的继承
class 派生类名(基类名)
...
# 具体案例
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() # 再次调用父类的方法 - 获取属性值