本节目录-面向对象
1 类介绍
1.1 面向对象oo特征
1.2 类的特性
1.3 创建与调用
1.3.1 基本结构
1.3.2 结构说明
1.3.3 对外部提供只读访问接口
1.3.4 析构方法
2 继承
2.1 继承介绍
2.2 横向关系(组合)VS纵向关系(继承)
2.3 内置函数
2.3.1 issubclass
2.3.2 isinstance
2.3.3 hassttr

1 类介绍
1.1 面向对象oo特征
oo=Object Oriented
1、封装---信息隐蔽技术
2、继承---子类自动共享父类之间数据和方法的机制
3、多态---不同对象对同一方法响应不同的行动(不同的class中可以含有相同的函数名,响应根据函数中的定义进行)

1.2 类的特性
封装:
1、防止数据被随意修改; 2、使外部程序不需要关注对象内部的构造,只需要通过此对象对外提供的接口进行直接访问即可;
继承:
通过父类-子类的方式以最简洁的方式实现,不同角色

1.3 创建与调用
1.3.1 基本结构
类创造对象,对象称为类的一个实例(实例对象)
类对象(class、大写字母开头)=属性(变量)+方法(函数)
class Tirle:#python中类以大写字母开头

class Dog(object):
nation = 'china' #公有属性
def __init__(self,name,food): #构造函数、构造方法==初始化函数
self.name = name #成员属性
# self.food = food
self.__heart = 'namal' #私有属性

def wark(self): #类的方法
print('%s is dog'% self.name)
def eat(self,food):
print("%s is eating %s" %(self.name,food))

D = dog('sss','dutou') #实例化后产生的对象称为实例
D.wark()
D.eat('baozi')

1.3.2 结构说明
类-->>实例化-->>实例
self 就是调用当前方法的对象
__init__ #构造方法
返回值为None,强制添加返回值会报错TypeError:__init__() should return None
self.name = name #属性--成员属性 外部可以调用,并且内部方法也可以调用
self.__name = name #私有属性(对外部不可见,内部的方法可以调用)
__private_attr_name = value私有属性
def sayhi() #方法
++++++++++++++++++++++++++
__init__(self)方法:构造方法
返回值为None,强制添加返回值会报错TypeError:__init__() should return None
>>> class ball:
def __init__(self,name):
self.name = name
def kick(self):
print ('I am %s , who kick me' % self.name)
>>> a = ball('A')
>>> a.kick()
I am A , who kick me
>>> a = ball() #----->>必须添加参数、否则报错
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
a = ball()
TypeError: __init__() missing 1 required positional argument: 'name'
添加默认参数:
>>> class ball:
def __init__(self,name='null'):
self.name = name
def kick(self):
print ('I am %s , who kick me' % self.name)
>>> a = ball('A')
>>> a.kick()
I am A , who kick me
>>> a = ball()
>>> a.kick()
I am null , who kick me
不添加默认参数会报错:
++++++++++++++++++++++++++

1.3.3 对外部提供只读访问接口
def get_heart(self): #比较安全
return self.__heart
强制访问私有属性:
r1._Role__heart

公有属性:所有实例化的对象都可以访问的属性为公有属性(在类中直接定义)
Role.nation = 'US' 更改公有属性
+++++++++++++++++++++++++++++++++
私有变量或者函数:在python中定义私有变量或者函数只需要在变量名或函数名前加上“__”两个下划线
>>> class person():
__name = "a"
def getname(self):
return self.__name
>>> p = person()
>>> p.__name
Traceback (most recent call last):
File "<pyshell#52>", line 1, in <module>
p.__name
AttributeError: 'person' object has no attribute '__name'
>>> p.getname()
'a'
伪私有:将变量或者函数改成"_类名__变量名"的形式
>>> p._person__name
'a'
+++++++++++++++++++++++++++++++++

1.3.4 析构方法
删除实例化的实例
def __del__(self):
print("del--run")

2 继承
2.1 继承介绍
继承概念的实现方式主要有2类:实现继承、接口继承。
实现继承是指使用基类的属性和方法而无需额外编码的能力;
接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构爹类方法);

多继承时--继承顺序的区别(py2中才能体现,py3全部使用广度查询的方式进行继承)
新式类,查询使用广度查询,将同级的所有类全部查询完毕才继续往上一层类中查找
经典式类,查询使用深度查询,将纵深的所有类全部查询完毕才继续同一层的其他层中查找

class 子类(基类、父类、超类)
class DerivedClassName(BaseClassName):
……
>>> class parent:
def hello(self):
print ('old jaksjd parent')
>>> class child(parent):
pass
>>> p = parent()
>>> p.hello()
old jaksjd parent
>>> c = child()
>>> c.hello()
old jaksjd paren
注意:如果子类中定义与父类同名的方法或者属性,在调用时调用自己的属性或者方法。
>>> class parent:
def hello(self):
print ('old jaksjd parent')
>>> class child(parent):
def hello(self):
print ('new jaksjd child')
>>> p = parent()
>>> p.hello()
old jaksjd parent
>>> c = child()
>>> c.hello()
new jaksjd child

注意:经典类VS新式类 #建议使用新式类
class Person(object): #new style
super
class Person: #classical style
ParentClass.__init__
#SchoolMember.__init__(self,name,age,sex) #经典类继承写法
super(Teacher,self).__init__(name,age,sex) #新式类继承写法

2.2 横向关系(组合)VS纵向关系(继承)
class tutle:
def __init__(self,x):
self.num = x

class fish:
def __init__(self,x):
self.num = x
class pool:
def __init__(self,x,y):
self.tutle = tutle(x)
self.fish = fish(y)
def print_num(self):
print('the totel of tutle is %d in the pool,the totel of fish is %d in the pool!' % (self.tutle.num,self.fish.num))
>>> pool = pool(1,10)
>>> pool.print_num()
the totel of tutle is 1 in the pool,the totel of fish is 10 in the pool!

Mix_in
绑定:
python严格要求方法需要有实例才能被调用,这种限制就是python的绑定。

2.3 内置函数
所有的类的统称为:object
2.3.1 issubclass
issubclass(class,classinfo)检查class是否是classinfo的一个子类,是则返回true
1、一个类被认为是自身的一个子类
2、classinfo可以是类对象组成的元组,只要class是其中任何一个候选类的子类,则返回true
>>> class a:
pass
>>> class b(a):
pas
>>> class c :
pass
>>> issubclass(a,b)
False
>>> issubclass(b,a)
True
>>> issubclass(a,a)
True
>>> issubclass(c,b)
False
>>> issubclass(a,object)
True

2.3.2 isinstance
isinstance(object,classinfo)检查一个实例对象object是否属于一个类classinfo,
1、如果第一个参数不是对象,则永远返回false
2、如果第二个参数不是类或者由类对象组成的元组,会抛出TypeError异常
>>> b1 = b()
>>> isinstance (b1,b)
True
>>> isinstance (b1,a)
True
>>> isinstance (b1,(a,b,c))
True

2.3.3 hassttr
attr = attribute:属性
hassttr(object,name)检查一个对象是否有指定的属性
name表示一个属性名,需要用单引号将其括起来,格式为:‘name’
>>> class C:
def __init__(self,x=0):
self.x=x
>>>
>>> c1 = C()
>>> hasattr(c1,'x')
True
>>> hasattr(c1,'y')
False
>>> hasattr(c1,x)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
hasattr(c1,x)
NameError: name 'x' is not defined
getattr(object,name[,default])返回一个对象中指定的属性的值;如果指定的属性不存在,当
含有default参数时返回默认值,否则返回no attribute 'name'
>>> getattr(c1,'x')
0
>>> getattr(c1,'y')
Traceback (most recent call last):
File "<pyshell#28>", line 1, in <module>
getattr(c1,'y')
AttributeError: 'C' object has no attribute 'y'
>>> getattr(c1,'y',"您所访问的属性不存在……")
'您所访问的属性不存在……'
setattr(object,name,value)设置一个对象中指定属性的值,如果指定的属性不存在则新建属性并赋值
>>> setattr(c1,'y','fish')
delattr(object,name)删除一个对象中指定的属性,如果指定的属性不存在则抛出AttributeError
>>> getattr(c1,'y')
'fish'
>>> delattr(c1,'y')
>>> delattr(c1,'y')
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
delattr(c1,'y')
AttributeError: y
property(fget=None,fset=None,fdel=None,doc=None)用过属性来控制属性
>>> class C:
def __init__(self,size=10):
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)
>>> c1=C()
>>> c1.size
10
>>> c1.getsize()
10
>>> c1.x=18
>>> c1.getsize()
18

3 多态

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

Python基础篇-day7的更多相关文章

  1. python基础篇-day1

    python基础篇 python是由C语言写的: pass 占位符: del,python中全局的功能,删除内存中的数据: 变量赋值的方法: user,pass = 'freddy','freddy1 ...

  2. python基础篇之进阶

    python基础篇之进阶 参考博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html python种类 1. cpython  使用c解释器生产 ...

  3. python基础篇(六)

    PYTHON基础篇(六) 正则模块re A:正则表达式和re模块案例 B:re模块的内置方法 时间模块time A:时间模块的三种表示方式 B:时间模块的相互转换 随机数模块random A:随机数模 ...

  4. python基础篇(五)

    PYTHON基础篇(五) 算法初识 什么是算法 二分查找算法 ♣一:算法初识 A:什么是算法 根据人们长时间接触以来,发现计算机在计算某些一些简单的数据的时候会表现的比较笨拙,而这些数据的计算会消耗大 ...

  5. python基础篇(一)

    PYTHON基础篇(一) 变量 赋值 输入,输出和导入 A:输入 B:输出 C:导入 运算符 A:算数运算符 B:比较运算符 C:赋值运算符 D:位运算符 E:逻辑运算符 F:成员运算符 G:身份运算 ...

  6. python基础篇(二)

    PYTHON基础篇(二) if:else,缩进 A:if的基础格式和缩进 B:循环判断 C:range()函数和len()函数 D:break,contiue和pass语句 for,while循环 函 ...

  7. python基础篇(三)

    PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...

  8. python基础篇(四)

    PYTHON基础篇(四) 内置函数 A:基础数据相关(38) B:作用域相关(2) C:迭代器,生成器相关(3) D:反射相关(4) E:面向对象相关(9) F:其他(12) 匿名函数 A:匿名函数基 ...

  9. Python基础篇--输入与输出

    站长资讯平台:Python基础篇--输入与输出在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和输出输出输入END在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和 ...

随机推荐

  1. C++中const用法详解

    本文主要内容来自CSDN论坛: http://bbs.csdn.net/topics/310007610 我做了下面几点补充. 补充: 1. 用const声明全局变量时, 该变量仅在本文件内可见, 类 ...

  2. WCF学习心得----(三)服务承载

    WCF学习心得----(三)服务承载 这一章节花费了好长的时间才整理个大概,主要原因是初次接触这个东西,在做练习实践的过程中,遇到了很多的问题,有些问题到目前还没有得以解决.所以在这一章节中,有一个承 ...

  3. 关于三星设备 Activity.onDestroy() 被调用。显示“开发者选项”

    昨天在三星的Galaxy s4上测试自己的App时,在Activity页面间跳转的时候,第一个Activity的onDestory()总是被调用,导致从第二个Activity返回的时候,第一个Acti ...

  4. erlang集成开发环境搭配配置出现的问题

    问题:Unable to create the selected preference page.  com.avaya.exvantage.ui.interfaces.eclipse.plugin  ...

  5. ffmpeg利用libav库把yuv视频流转换为TS串流

    今天到月末了,才发我这个月的第一篇文章,因为这个月前三周一直在看ffmpeg的libavcodec和libavformat两个库源码.实验室要做一个“小传大”的软件,就是android手机或平板电脑的 ...

  6. java.sql.Types,数据库字段类型,java数据类型的对应关系

    以下转自:http://kummy.itpub.net/post/17165/172850 本文在原文基础上有增减. 本概述是从<JDBCTM Database Access from Java ...

  7. 从Chrome源码看浏览器如何构建DOM树

    .aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } p { font-size: 1 ...

  8. git多人合作模式的应用

    接触git只有不到一年的时间,可以说比大多数人起步都晚.那会还沉浸在自己的舒适圈里面,进公司就用着perforce,一用就快7年,觉得自己会用一个SCM就行了,捧着不放,也不想去接触别的SCM. 直到 ...

  9. Spark Graphx编程指南

    问题导读1.GraphX提供了几种方式从RDD或者磁盘上的顶点和边集合构造图?2.PageRank算法在图中发挥什么作用?3.三角形计数算法的作用是什么?Spark中文手册-编程指南Spark之一个快 ...

  10. magento模块的建立

    所有路径都是从根目录开始的: 1.建立模块的配置文件: 路径:app/etc/models/下建一个文件(模块名称是Orderlottery)为Bf170_Orderlottery.xml,内容如下: ...