简介
- 类(class): 主要是两个-类和类实例
定义
- 用关键字class去定义一个类,如果没有指定父类 ,默认继承object类
class Human(object):
pass
类属性
class Human(object):
run=True
- 类属性: 属性和类绑定,不是和实例绑定.说明这个属性是类共有的
实例属性
class Human(object):
def __init__(self,name):
self.name=name
human_a=Human("alan")
- 实例属性: 实例属性是和实例绑定的,这个属性是实例特有的
- 实例属性可以在实例创建后任意时间设置
- 一般放在构造函数__init__()里
类方法
class Human(object):
def __init__(self,name):
self.name=name
def walk(self):
print self.name+"is walking"
human_a=Human("alan")
human_a.walk()
- 类的方法可以看作是一种类属性
- 传入的第一个参数self,表示调用这个类方法的实例
访问控制
- 类实例的属性可以在外部随意更改
- 如果不想让外部访问到,则在属性名字前加两个下划线__name,这样就无法从外部直接访问了
- 通过get的接口可以访问
class Human(object):
def __init__(self,name):
self.name=name
def walk(self):
print self.name+"is walking"
def get_name(self):
return self.__name
human_a=Human("alan")
print human_a.get_name()
print human_a.name
- 通过set接口可以更改__name字段
class Human(object):
def __init__(self,name):
self.__name=name
def walk(self):
print self.name+"is walking"
def get_name(self):
return self.__name
def set_name():
self.__name=name
human_a=Human("alan")
print human_a.set_name("bob")
- 这样做的原因是可以增强代码的健壮性,直接暴露属性可能会有意想不到的后果,通过接口的方式可以加以控制
继承
- 子类拥有父类的属性,方法.叫做继承
- 子类同时可以拥有父类没有的属性,方法.叫做多态
- 示例:
class Man(Human):
def __init__(self,name,has_wife):
self.name=name
self.__has_wife=has_wife
- 假设Human有很多属性,很多初始化步骤:
class Man(Human):
def __init__(self,name,has_wife):
super(Man,self).__init__(name)
self.__has_wife=has_wife
这里的super(Man,self)._ _ init_ _(name) 调用了父类Human的构造函数
- 继续创建一个类:
class Woman(Human):
def __init__(self,name,has_husband):
super(Woman,self).__init__(name)
self.__has_husband=has_husband
- Man中可以创建其他方法:
class Man(Human):
def __init__(self,name,has_wife):
super(Man,self).__init__(name)
self.__has_wife=has_wife
def work(self):
print "A Man is Working!"
def run(self):
print "A Man is Running!"
- Woman也可以创建其他方法:
class Woman(Human):
def __init__(self,name,has_husband):
super(Woman,self).__init__(name)
self.__has_husband=has_husband
def shopping(self):
print "A Woman is Shopping!"
def cooking(self):
print "A Woman is Cooking!"