class(类)
特点:一个抽象的对象,是面向对象语言的核心,类可以不继承或多继承。
标识:class
例子:
class A(object):
"""
这是一个演示的类
"""
COUNT_A = []
def __init__(self, a):
self.a = a
self.COUNT_A.append(1)
def str(self):
print 'COUNT_A:%s, list_a:%s' % (self.COUNT_A, self.a)
访问类:
my_a = A(123)
my_a.str()
print my_a.__doc__
# 输出结果
# COUNT_A:[1], list_a:123
#
# 这是一个演示的类
详解:
COUNT_A: 类A的类变量(全局变量),可以通过A.COUNT_A或my_a.COUNT_A来访问,生命周期为类A;
a: 为类A的成员变量,可以通过my_a.a访问,生命周期为实例my_a。
my_a.___doc__:类的说明注析
在类中以双下划线(__)开头的变量是私有变量(实例是不允许a.__host直接访问的),以双下划线(__)开头的方法可能是python自带函数。
类继承:
class A(object):
"""
这是一个演示的类A
"""
COUNT_A = []
def __init__(self, a):
self.a = a
self.COUNT_A.append(1)
def str(self):
print 'COUNT_A:%s, list_a:%s' % (self.COUNT_A, self.a)
class B(A):
"""
这是一个演示类B,继承了类A
"""
def __init__(self, b):
super(B, self).__init__(b) # 初始化父类
self.b = b
def str(self):
print 'COUNT_A:%s, list_a:%s' % (self.COUNT_A, self.a)
my_a = A(123)
my_a.str()
my_b = B(234)
my_b.str()
# 输出结果
# COUNT_A:[1], list_a:123
# COUNT_A:[1, 1], list_a:234
详解:
super(B, self).__init__(b):# python新用法所建议的初始胡父类用法
my_b.str类中:继承了A的COUNT_A和a。
问题:
COUNT_A:[1, 1]竟然是有两个值?
原因:
因为COUNT_A为A类的成员变量(全局变量),并且COUNT_A是一个列表(经测试如果全局变量为一个int类型的,输出结果则为默认值,这可能跟python各类型的存储使用有关,
字符,元组,数字是不可以更改的对象,列表和字典都是指针)
注意
:当一个类继承了两个或多个类的时候,
super(B, self).__init__(b)只会初始化class B(A, C)中的A