Thanks to visit codestin.com
Credit goes to github.com

Skip to content

tinglucomputer/python-OOP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

python面向对象的基础知识
基本上都和C++/Java差不多,接下来只是关心属于python独有的语法
面向对象最大的好处:
    封装
        把属于某一个类的属性和动作与该类进行绑定,把属性和动作限定在该类中,使得不是该类的对象不能访问,保护类数据的隐私
    继承
        高级的父类可以派生低级的子类,子类按照约定可以含有(继承)父类的公共方法和公共属性
        这种方式可以降低代码的重复性,高级的父类做一些基本的定义,子类再具体的实现
    多态
        不同的子类对象调用相同的父类可以产生不同的效果
        在java中称这种现象为上转型
        父类对象被一个子类对象赋值,调用父类对象时产生不同的结果,这是因为在赋值的时候子类中的方法重写了父类中同名的方法
1.类中没有想要的属性时,可以直接在对象上添加,语法是:对象名.属性名 = 属性值,但是不推荐使用
2.self表明当前对象的应用,即使在对象调用函数时并没有传递该对象,这是系统帮助我们完成的
    对象拥有自己的内存空间,该空间中存储属于对象的属性(数据),至于类中的方法对象并不存储在自己的内存空间,而是多个对象共享一块类方法的空间
    在对象调用方法时,系统会把属于该对象的引用作为参数传递进来,这就是在函数声明时总有self关键字的原因
    在对象的内部想调用其他方法时可以使用self关键字
3.is和==的区别:is判断两个变量是否是同一个数据,即是否都是对同一个内存中的数据的引用
    而==只是判断两个变量的值时是否相等
    None代表着一个空对象,在进行None判断时尽量使用is
4.定义私有属性和私有方法时,在名字前面加上__两个下划线
    但是python并没有真正的私有属性和私有方法,在类外通过_类名__私有属性名/私有方法名也是可以访问的
5.子类中不能直接访问父类的私有属性和私有方法,如果想访问可以通过访问父类的公有方法来间接访问
6.在多继承的情况下,如果多个类中存在着同名的方法,在子类中调用该方法会按照继承的顺序来调用相应的方法,程序并不会报错
    在菱形继承下也是这样的情况
7.Method Resolution Order方法的解释顺序,系统为每一个类提供的属性是__mro__
    这样就可以在多继承的条件下看到函数或者属性被调用的路径
8.新式类和旧式类,如果一个类并没有继承自父类,最好让它继承自object类
9.上面讨论的属性和方法都是实例的,在python(或者说整个的面向对象语言中)类是一个对象,只不过是一个特殊的化的对象
    类也有类属性和类方法,只不过这些属性和方法都是独立于每个对象之外的
10.单例设计模式.我们声明一个类并不是想让这个类实例化多个对象,只需要在内存中维护一个这样的对象就可以,无论程序实例化了多少个对象,始终都是那一个对象
    比如回收站,整个系统就只有一个;音乐播放器,也只有一首歌在唱;当然了,word可以有多个窗口
11.try\except\else\finally结构,异常具有传递性,一般都在主程序中对异常进行处理,使得代码简洁高效
    我们也可以在程序开发时主动地抛出异常,如果不满足程序中的设定那么程序会自动的抛出异常
12.通过import 模块名的方式可以导入一个模块,该模块一般是.py类型的文件,导入该模块之后就可以通过模块名.的形式访问模块内的函数\变量
    如果觉得模块名太长可以使用as关键字重新定义一个新的名字,命名时一般使用大驼峰规则(每一个单词的首字母都大写,小驼峰规则是第一个单词的首字母小写其余的都大写)
    import 模块名可以导入整个模块,如果不想导入全部的模块则可以光导入模块内的工具,from 模块名 import 工具名,此时使用工具时可以直接使用工具名即可
    from 模块名 import *等价于import 模块名,另外导入多个模块时,同名的函数或者属性以最后的一个为准,故在导入时需要格外的小心
13.模块.__file__表明了该模块的存储路径信息
    __name__属性是Python的一个内置属性,直接执行模块时属性值为__main__;如果被其他模块导入时,属性值为模块名
    根据此,我们在一个测试模块中写了一部分的功能,也写了一些测试代码,如果另一个模块导入了该模块,我们只希望有用的代码执行,并不希望测试代码也执行
    if __name__ == '__main__':测试代码
14.程序内的变量名都使用大驼峰规则,模块名和包名使用小写字母+_,如果想把几个模块打包,需要建立package文件夹,在该文件夹下必须一个__init__文件
    在这样的一个文件下,必须写明外界可以导入的模块,否则即使外界使用import关键字导入该包也调用不到所用的函数或者属性
15.字符串中有中文,或者说文件中有中文但是程序处理不恰当时,最好指定它的编码格式为utf-8

About

python中的面向对象基础

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages