A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Moonbria 初级黑马   /  2018-8-1 23:37  /  1156 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第一部分  类相关
1.私有属性和方法可不可以被继承:
在子类内部是无法使用父类的私有方法和属性的,使用super()调用父类私有方法或属性,有智能提示(pycharm)但是还是无法使用。
在子类实例对象下 可以用  子类对象._父类名__私有方法/属性名来调用私有方法和属性。
假如父类公有方法包含对其私有方法的调用,子类可以通过调用公有方法访问私有方法和属性。所以私有方法和属性,算是可以被继承。
2.类属性和实例属性
测试函数
class Tools(object):
    tools_count = 0
    def __init__(self):
        self.tools_count += 1  
tool1 = Tools()
print(Tools.tools_count)
print(tool1.tools_count)
tool2 = Tools()
print(Tools.tools_count)
print(tool2.tools_count)
核心问题还是互相访问
运行结果 0\n1\n0\n1
说明类属性未被更改,init函数借用Tools.count的初始值创建了一个实例属性self.count
也说明类属性和实例属性同名,用实例对象访问,得到的是实例属性的值。
将init中的self改成Tools
输出结果是 1\n1\n2\n2
如果在外部更改tool2的count属性,不会更改类属性。即类属性只能通过类对象修改,使用实例对象对类属性操作 会生成一个对象的实例属性,并不会改变类属性   实例属性当然也不能通过类对象更改
实例对象可以访问类属性
类对象不可以访问实例属性  使用类名.实例属性会报错,但是如果在实例方法内部加上对象名,可以访问
类属性可以在方法中定义和修改。就是在函数中使用类名.或者类名= 的方式可以定义一个类属性
3.__new__和__init__
new函数是一个特殊的静态函数
new函数返回一个实例对象的内存地址的引用,所以它一定有返回值
init函数接收new函数的结果,初始化一个实例

第二部分 变量和函数
测试函数
age = []
a = 1

def foo2():
    a = 2
    print(a)
    age = [1]
    print(age)
   
   
foo2()
print(age)
print(a)
测试结果  
2\n[1]\n[]\1
1.全局变量和局部变量
在函数内部对与全局变量同名的局部变量使用赋值语句,会生成一个同名局部变量,可变不可变类型都会如此
在函数内部对可变类型使用方法,会直接改变全局变量的值,对不可变类型无法使用方法
特别说明:对于列表  如果使用+= 相当于调用extend方法,会更改全局变量的值  但是如果是使用
list  =  list + list2  则相当于使用了赋值语句
2.global的相关
global a  意思是对a是全局变量的声明  可以先声明再定义,但是不能直接global a = 1 这样直接定义
所以global可以声明全局变量,但是不能定义全局变量
如果有同名,使用global相当于把原来对于局部变量的指针修改到了全局变量上,所以可以更改全局变量的指向
3.缺省参数和不定长参数
测试函数
foo(a=1, **kwargs)
一般来说,函数参数传递顺序是,必须传的参数,缺省参数,不定长参数。
缺省参数可以放到不定长参数后面,但是不定长参数必须为*args,如果放在**kwargs后面,会直接报错。
  
4.函数的命名可以使用小驼峰命名法(PEB8并不买账)
第三部分
变量的各种方法
1.几个不怎么常用的方法
字符串
string.partition(str) 从左到右 以第一个符合要求的字符串,如果没有,生成两个空元素的元组
string.rpartition           从右开始查找的partition
string.split() 把对应str删除,分隔成列表  num则表示从左到右至多去除多少个 会让\t等变成不可识别状态  并且可以删除
spring.splitlines() 按照其作为分隔线   \t不识别  注意
a.join(b) 在a的每一个元素中间插入一个b
字典
dic2 = dict.formkeys(list,values) 所有的values 都是同一个values  (静态)
b=dict.copy() 不能使用b=a 这样得到的a和b是同一个内存区域 相当于这个对象的引用计数为2,只有把两个引用计数都删除之后,对应字典的内容才会被清除
dict.get(n) 没有key会显示none
dict.setdefault(a,b) 无法更改已存在的键值对  如果key已存在  无法更改values
dict.popitem() 字典是没有顺序的  所以是先通过 iter 方法将其转化为可迭代对象
dict.items()               显示dict所有元素 和他的类型 dict
2.标识符的命名规则
只要不和关键字冲突就可以,比如,在不是定义函数名的情况下使用__init__作为变量名是没问题的。
注意模块名不要和内置模块名冲突,否则可能导致对应功能无法调用
1358个字  差不多够了 下次见 *_*


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马