鱼c心得3

来源:互联网 发布:云计算对教育的影响 编辑:程序博客网 时间:2024/05/16 08:15

123   30章os模块介绍,模块就是找各种函数的打包

    绝对路径是真实路径 ,相对路径是从现在的位置走过去的路径

   import pickle  泡菜  二进制保存  把大量的数据保存成二进制文件放在本地,减少运行文件大小

   my_list=[123,456,789,'鱼c']

   pickle_file=open('my_list,pkl','wb')

  pickle.dump(my_list,pocikle_file)

pickle_file.close()

————————————

通过load 读出来二进制文件

pickle_file=open('my_list.pkl','rb')

my_list2=pickle.load(pickle_file)

print(my_list2)

—————————

33 异常处理   鱼c论坛里有各种异常类型的总结

try:

  ............. 检测范围  如果在范围内有多个错误 只输出一个错误,然后接着运行下面的主程序

    except OSError as reason:

        print('文件出错了T_T\n错误的原因是:'+str(reason)')

  except TypeError as reason:

也可以except 不接类型  就是任何类型 但是会被ctel+c 中断 所以不推荐这种方式

——————————

raise  造异常

raise ZeroDivisionError    造除数为零的异常

_________________________________________________________

36类和对象

数据的封装是列表

带包打包成方法也是语句封装

模拟真实世界把数据和代码封装在一起就是对象

对象的静态也正是属性,对象的动态特征是方法

继承 class MyList(list):   类首字母大写,方法是首字母小写

             pass

list2=Mylist()       这就继承了list的所有方法了  

多态即多种形态,在运行时确定其状态,在编译阶段无法确定其类型,这就是多态 

不同对象,对同一方法响应不同的行动。

同一种方法,不同的对象有不同的响应。  pythion 的变量不确定类型,就是一种多态

37 类 self 相当于this

    构造函数, def __init__(self,name) 左右下划线

   class Person:
    __name='神雕大侠'   前双下划线 编程私有变量 
    def getName(self):      通过方法变相访问私有变量
        return self.__name

  p.Person()

p. getName()    >>>神雕大侠

p._Person__name     是可以直接访问私有变量的

Pathion 的私有变量是假的,是可以通过这个方法访问的

class Person() :
    def name(self):
        print('我是神雕大侠')
class Child(Person):
    def name(self):
        print('我是小龙女')

这中方法可以实现 子类覆盖父类的方法,父类不受影响

——————————————————————

子类构造问题

子类增加构造方法的时候,会自动覆盖掉父类的构造,这样就继承不了父类的构造属性了

可以通过两种方法子类新构造1 调用未绑定父类方法   在子类中添加 父类名__init__(self)

                                            2 使用super函数     super__init__(self)  就会自动添加父类的构造方法进去

____________________________________

类的组合,用一个新类把同类型的类和在一起。    继承是纵向的,上下级

class Turle:
    def __init__(self,x):
        self.num=x
class Fish:
    def __init__(self,x):
        self.num=x
class Pool:                                    在构造的时候实例化要归在一起的类
    def __init__(self,x,y):                
        self.turle=Turle(x)
        self.fish=Fish(y)
    def print_num(self):
        print("水池里有乌龟%d 鱼%d" % (self.turle.num,self.fish.num) )

——————max--in 是一种编程方法 值得学习的

类,类对象,实例化对象

class CC :
    num=0
a=CC()
b=CC()
c=CC()

>>> a.num
0
>>> b.num
0
>>> c.num
0
>>> c.num+=10
>>> c.num
10
>>> CC.num
0
>>> CC.num+=100   
>>> CC.num  
100
>>> a.num     类对象的静态属性被更改了,实例化的个体也会受影响会改变
100
>>> b.num
100
>>> c.num     唯独这个c实例没有被改变,当重新赋值的时候就相当于覆盖掉了类对象的静态属性
10

self 详细解释  

首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗,不要搞另类,大家会不明白的。
self指的是类的实例本身,类中方法必须带self

多态即多种形态,在运行时确定其状态,在编译阶段无法确定其类型,这就是多态

当属性的名字和类的相同会覆盖方法,属性名多用静态词,方法多用动态

pY规定方法只有实例才能被调用

类对象中的属性和方法都是静态实例,即使类的名称被删除,实例也能调用

调用的时候虽然不用带self  但是会自动加入一个self  c=C()   c.x(self,x,y)  这个self是被隐藏看不到的

41类的一些方法  

issubclass(class,classinfo)  判断是否是子类 是返回true

子类,父类 或者本身object 都会返回true

isinstance(object,classinfo)  判断是否是实例

hasattr(object,name)  判断目标是否有这个属性  has(c1,'x') 属性要加上双引号

getattr(c1,'y','访问的属性不存在')   获得这个属性的值,如果没有,返回提示

setattr(c1,'y',值)  设置该变量的值

delattr(c1,'y')   删除属性

————————————

class c:
    def __init__(self,size=0):
        self.size=size
    def getsize(self):
        return self.size
    def setsize(self,value):
        self.size=value
    def delsize(self):
        del self.size
    x=property(getsize,setsize,delsize)   一种高级的属性 便于后来的修改

                      3个方法 (获得,设置,删除)

>>> c1=c()
>>> c1.getsize()
0
>>> c1.x
0
>>> c1.x=10
>>> c1.x
10
>>> del c1.x