内容大部分来自:菜鸟
类的属性,方法和继承(参考)
1.变量
1.全局变量,可以被任意函数,文件使用,达到全局同步,名字唯一性,尽量少使用,函数引用时,声明global 2.局部变量,仅存在对应作用域(随作用域释放),注意会覆盖同名的全局变量 3.静态变量(类公有变量),直接定义在类里,不是类方法里,可以直接通过类名访问,类内以及类的实例中可以同步共享 4.类的protect属性,可以被子类继承,能在类外被访问(应该主观上避免对 protected 属性的访问,但访问它也不会导致报错),和public的使用一样 5.类的private属性,不能被子类继承,不能被类外访问(不要盲目地将属性设为 private),可以通过类内方法调用(间接调用)
class A(object):
# 静态变量
sta_num = 0 # 公有属性,同下面的name
_pro_num = 0 # 保护属性,同下面的_sex
__pri_num = 0 # 私有属性,同下面的__age
def __init__(self, name, age, sex):
# public
self.name = name
# protect
self._sex = sex # 能类外引用,和public一样,只能命名上为protect属性,方便开发者识别
# private
self.__age = age # 不能类外引用,可以通过类内方法调用(间接调用)
# 直接引用public对象,和protect对象
a.name = 'wumenglong'
print(a.name)
print(a._sex)
# print(a.__age) 不能引用类的私有属性
print(A.sta_num)
print(A._pro_num)
#print(A.__pri_num) 不能引用类的私有属性
2.方法
类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里的
对象的__dict__中存储了一些self.xxx的一些东西
1.公有方法,不加装饰器,只能被类实例引用,且第一个参数时self(函数名开头不加__) 2.私有方法,'__'开头,不能在类外使用,即不能被实例引用,只能在类内被其他方法使用,注‘_’一个下划线开头也是公有方法 3.静态方法,@staticmethod,参数不受限制,可以被类名和类实例引用 4.类方法,@classmethod,第一个参数是cls,它表示类本身,可以被类名和类实例引用
注:如果用类方法调用静态方法,可以让cls代替类名,防止类名需要改变时,改动的地方比较多
class MyClass(object):
name = 'Test'
def __init__(self):
self.func1()
self.__func2()
self.classFun()
self.staticFun()
def func1(self):
print self.name,
print "我是公有方法."
def __func2(self):
print self.name,
print "我是私有方法."
@classmethod
def classFun(self):
print self.name,
print "我是类方法."
@staticmethod
def staticFun():
print MyClass.name,
print "我是静态方法."
# 内置方法
mc = MyClass()
3.继承
参考:继承
继承是面向对象的重要特性之一, 继承关系继承是相对两个类而言的父子关系,子类继承了父类的所有公有属性和方法, 继承,实现了代码重用
1.如果父类定义了__init__方法,子类必须显式调用父类的__init__方法, ParentClass.__init__(self,[args...]) 或者super(子类,self).__int__([args...])
- 经典类的写法: 父类名称.__init__(self,参数1,参数2,...)
- 新式类的写法:super(子类,self).__init__(参数1,参数2,....)
2.多重继承, Python支持多重继承,第一个类可以继承多个父类,但是继承第一个父类的__int__方法
3.子类对父类的重写
运算符(按优先级高->低)
- 四则
- 位运算 : &(与), |(或), ^(异或,相同为0,相异为1), ~(非),>>(右移), <<(左移) (注:优先级没有四则运算高)
- ==,=
- 成员运算符 : in(元素在容器里面), not in(不在)
- 逻辑运算符 : and, or, not (注:优先级最低)
以下表格列出了从最低到最高优先级的所有运算符:
运算符 描述 lambda Lambda 表达式(优先级最低) or 布尔“或” and 布尔“与” not x 布尔“非” in,not in 成员测试 is,is not 同一性测试 <,<=,>,>=,!=,== 比较 | 按位或 ^ 按位异或 & 按位与 <<,>> 移位 +,- 加法与减法 *,/,% 乘法、除法与取余 +x,-x 正负号 ~x 按位翻转 ** 指数 x.attribute 属性参考 x[index] 下标 x[index:index] 寻址段 f(arguments...) 函数调用 (experession,...) 绑定或元组显示 [expression,...] 列表显示 {key:datum,...} 字典显示 'expression,...'(优先级最高) 字符串转换
注:Python 中没有 ++ 或 -- 自运算符
因为在 Python 里的数值和字符串之类的都是不可变对象,对不可变对象操作的结果都会生成一个新的对象。
容器
list
- 初始化:L = []
- 追加元素: L.append(1)
- 删除元素:del L[0]
- 切片:L[n:m] # 得到索引n到m的列表(不包含m,若n为空,是开始,m为空是末尾,-1代表尾元素)
- 切片:b = a[i:j:s]这种格式呢,i,j与上面的一样,但s表示步进,缺省为1.当s为-1,输出倒序
- 加法,打印的乘法(输出多个)
#!/usr/bin/python # -*- coding: UTF-8 -*- list01 = ['runoob', 786, 2.23, 'john', 70.2] list02 = [123, 'john'] print list01 print list02 # 列表截取 print list01[0] print list01[-1] print list01[0:3] # 列表重复 print list01 * 2 # 列表组合 print list01 + list02 # 获取列表长度 print len(list01) # 元素是否存在于列表中 print 'john' in list02 # True # 迭代 for i in list01: print i # 比较两个列表的元素 print cmp(list01, list02) # 列表最大/最小值 print max([0, 1, 2, 3, 4]) print min([0, 1]) # 将元组转换为列表 aTuple = (1,2,3,4) list03 = list(aTuple) print list03 # 在列表末尾添加新的元素 list03.append(5) print list03 # 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) list03.extend(list01) print list03 # 统计某个元素在列表中出现的次数 print list03.count(1) # 从列表中找出某个值第一个匹配项的索引位置 print list03.index('john') # 将对象插入列表 list03.insert(0, 'hello') print list03 # 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 print list03.pop(0) print list03 # 删除列表元素(按索引删) del list02[0] print list02 # 移除列表中某个值的第一个匹配项(按元素删) list03.remove(1) print list03 # 反向列表中元素 list03.reverse() print list03 # 对原列表进行排序 list03.sort() print list03
元组
和列表差不多,不能删除元素,不能增加改变元素,string就是一个特殊的元组
字典
遍历:
for k,v in dic.items(): print("key:"+k) print("value:"+str(v))
Python字典包含了以下内置方法:
序号 | 函数及描述 |
---|---|
1 | dict.clear() 删除字典内所有元素 |
3 | dict.fromkeys(seq[, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值 |
4 | dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值 |
6 | dict.items() 以列表返回可遍历的(键, 值) 元组数组 |
7 | dict.keys() 以列表返回一个字典所有的键 |
9 | dict.update(dict2) 把字典dict2的键/值对更新到dict里 |
10 | dict.values() 以列表返回字典中的所有值 |
11 | pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
12 | popitem() 随机返回并删除字典中的一对键和值。 |
set()集合
不允许重复,里面是随机的