python语言系统学习

Posted 毛无语666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python语言系统学习相关的知识,希望对你有一定的参考价值。

一、面向对象编程。

抽象出一个类对象:

 

 根据类对象创建实例对象。(将某个类对象赋值给某个实例对象)

dog = Dog("拉布拉多","旺财","3","很好")

通过实例对象,访问属性和方法。dog.breed  dog.run()

规则:每个单词的首字母大写,其余字母全部小写。

     为了在创建实例后对其进行初始化(给实例对象绑定一些属性),需要创建名为__init__( )创建实例对象后就会自动调用这些特殊方法。指的是创建类对象会自动调用所有以双下滑线开头的方法,还是指的是只调用__init( )__方法,这个地方没看明白????。应该是只调用了init( )。

方法和函数的区别:

方法就是定义在类对象中的函数。

1.定义方法时,方法的第一个形参表示调用该方法的实例对象,第一个形参的名称通常是self

2.调用方法的时候,系统自动将调用该方法的实例对象作为实参传递给第一个形参。

如果没有定义__init__,或者定义了__init__,但是没有定义除self以外的形参,那么根据类对象创建实例对象时就不需要传入实参。

如果在类对象在中定义了特殊的方法__init__,那么对于"类名([实参])",会执行两大步:

1.创建实例对象

2.自动调用创建的实例对象的特殊方法__init()__(创建的实例对象会作为实参被自动传递给特殊方法__init__的第一个形参self)

3-5 实例属性

实例属性指的是实例对象所绑定的属性。绑定实例属性的方式有两种:

1.在类对象的内部(方法中)

 语法格式: self.属性名 = 属性值

2.在类对象的外部

python是动态语言,所以,在实例对象创建之后,可以对其动态地绑定属性。

语法格式:实例对象.属性名 = 属性值

访问实例属性的方式有两种:

1.在类对象的内部(方法中)     语法格式: self.属性名

2.在类对象的外部    实例对象.属性名

3-6 实例属性下

特殊方法,可以使用__dict__查看某个实例对象绑定的所有属性和方法的字典。给一个对象绑定的实例属性对另一个对象是不起作用的。

3-7 类属性

绑定类属性(给类对象绑定属性)的方式有两种:

1.在类对象的内部(方法外) 语法格式:属性名 = 属性值

2.在类对象的外部: python是动态语言,所以,在类对象创建以后,可以对其动态的绑定属性。 语法格式:类对象.属性名 = 属性值

访问类属性的方式有两种:

1.在类对象的内部(方法中)     语法格式: 类对象.属性名

2.在类对象的外部    类对象.属性名 或:实例对象.属性名

类对象的所有实例对象都有一个指向类对象的指针,所以,类对象的所有实例对象都可以访问类属性。

总结:

3-8和3-12省略

3-10 实例方法

3-12 类方法

类方法必须用装饰器@classmethod进行修饰

在类方法的外部,分别通过类对象和实例对象访问类方法。

 

 实例对象里有指向类对象的指针

3-13 静态方法

在类对象中定义静态方法时,必须使用装饰器@staticmethod进行装饰。静态方法只是一个普通函数。

第一个形参没有特殊的含义和要求。

3-14 访问控制

指的是控制类对象的属性和方法在类对象的外部是否可以直接访问。

如果在类对象的属性或者方法前添加两个下划线__,那么在类对象的外部就不能直接访问该属性或方法了。

 

 仍然可以在类对象的外部动态绑定名为__XXX的属性或方法,这与类对象内部名为__XXX的属性或方法是不同的。

也可以在类对象的内部定义以单下划线开头的属性和方法,表示在类对象的外部可以访问,但是最好不要访问。

3-15 封装

封装 继承 和 多态 是面向对象编程的三大特征。

封装:1、把数据(属性)和行为(方法)包装到类对象中。在类对象的外部调用方法,就无须关心一个方法的实现细节。/2.。

2、在类对象的内部通过访问控制把某些属性和方法隐藏起来,不允许在类对象的外部直接访问。而是在类对象的内部对外提供公开的接口方法。(例如戈getter和setter)

 3-16 继承

直接把类定义时,括号里的object替换为需要继承的类即可。继承的主要作用是实现代码复用。

 

单继承:只有一个父类

多继承:多个父类

子类会继承所有父类的属性和方法。

3-18 重写

当父类中的某个方法被重写之后,通过子类或其实例对象调用,只能调用重写后的方法。若在子类重写的方法中想调用父类的方法,可以用super调用。

3-19 多态

简单的说,就是“具有多种形态”,他指的是:即便不知道一个变量所引用的对象是什么类型,仍然可以通过这个变量调用方法,在运行的过程中根据变量所引用对象的类型,动态的决定调用哪个对象中的方法。

python是一门动态语言,在调用时不会检查参数类型。而java是静态语言。实现多态的条件比动态语言严格很多。

动态语言的多态崇尚“鸭子类型”,即这个对象的行为像鸭子,我们就可以把它看做鸭子类型,即在下面的程序中,我们并不关心f函数中的parent的具体类型,我们只关心parent这个对象中是否有do_sth()这个函数。

3-20 MRO

MRO的全称是Method Resolution Order(方法解析顺序),它指的是一颗类继承树,当调用最底层类对象所对应实例对象的方法时,Python解释器

在类继承树上搜索方法的顺序。对于一颗类继承树,可以调用最底层类对象的方法mro()或访问最底层类对象的特殊属性__mro__,获得这颗类继承树的MRO。

mro函数和属性值的输出结果,代表了这一颗类继承树的搜索顺序。

 

 

 

以上是关于python语言系统学习的主要内容,如果未能解决你的问题,请参考以下文章

python语言系统学习

Python学习一在OSX系统下搭建Python语言集成开发环境

如何深入系统的学习一门编程语言——python自学笔记

Python学习之路

学习Python第一天

学习哪个编程语言呢?Python和C#哪个好学?