1.类的定义

类是一个用户定义类型,类似与c语言中的结构体

class <ClassName>:
"类的帮助信息"#类文档字符串
class_suite #类体

其中ClassName 是类的名字;类的信息可以通过ClassName.__doc__查看;class_suite由类成员,方法,数据属性组成

代码实例:

1 class number:
2 "这是一个数字"
3 number1 = 0
4 def display(self):
5 number.number1 += 1
6 print(number.number1)

代码分析:

1.number1是一个类变量,它的值将在这个类中的所有实例共享

2.self代表类的实例,虽然它在调用时不用传入相应的参数,但在定义类的方法时是必须要有的

3.display(self)是此类的方法,属于方法对象

2.类的构造方法和内置属性

所谓构造方法,是指创建对象时其本身所运行的函数。Python使用__init_()函数作为对象的函数的构造方法。当用户要在对象内指向对象本身时,可以使用self关键字。Python中的self想当于c++中this关键字,都是代表对象本身。

创建类的构造方法实例:

 1 class fruit:
2 #定义基本属性
3 name = ""
4 city = ""
5 #定义私有属性
6 __price = 0
7 #定义构造方法
8 def __init__(self,n,c,p):
9 self.name = n
10 self.city = c
11 self.price = p
12 def display(self):
13 print("%s%s%s" % (self.name,self.city,self.price))
14 #实例化类
15 f = fruit("1","2",,3)
16 f.display(

def __init__()函数定义类的构造方法,self是必须的参数,且必须为第一个参数

类实例

类实例是一个Python对象,它是使用类所创建的对象。每个Python对象都包含识别码,对象类型,属性,方法,数值等属性。

例如:

f = number()

1.使用id()内置函数,可以返回类的识别码

2.使用type()内置函数,可以返回类的对象类型

类的继承

所谓类的继承,就是新类继承旧类的属性和方法,,这种行为称为派生子类。继承的新类称为派生类,被继承的类称为基类。用户在创建派生类时,可以通过派生类来改变基类的任何方法。

派生类的语法如下:

1 class <类名称> [(基类1,基类2......)]:
2

注意:一个衍生类可以继承多个基类,基类之间用逗号隔开

派生类的构造方法

 1  #基类的定义
2 class A:
3 a = 0
4 def __init__(self,number):
5 self.a = number
6 def display(self):
7 print(self.a)
8 #派生类的定义
9 class B(A):
10 def __init__(self,number):
11 A.__init__(self,number)
12
13 x = B(1)
14 X.display()

需要注意的是派生类的构造方法必须调用基础类的构造方法,并使用完整的基类名称。

类的多继承

python同样的有限的支持多继承

多继承实例:

 1 class people:
2 #定义基本属性
3 name = ""
4 age = 0
5 #定义构造方法
6 def __init__(self,n,a):
7 self.name = n
8 self.age = a
9 def speak(self):
10 print("%s%d" % (self.name,self.age))
11
12 #单继承
13 class student(ppeople):
14 grade = ""
15 def __init__(self,n,a,g):
16 #调用基类的构造函数
17 people.__init__(self,n,a)
18 self.grade = g
19 #改写基类的方法
20 def speak(self):
21 print("%s%d%d" %(self.name,self.age,self.grade))
22 #定义类 speaer
23 class speaer:
24 topic = ""
25 name = ""
26 def __init__(self,t,n)
27 self.topic = t
28 self.name = n
29 def speak(self):
30 print("%s%s "%(self.topic,self.name))
31
32 #多重继承
33 class sample(people,speaer):
34 def __init__(self,n,a,g,t):
35 #调用基类的构造函数
36 people.__init__(self,n,a)
37 speaer.__init__(self,t,n)

这里需要注意的是:当所继承的基类中有相同的方法是,默认调用在括号中排在前面的基类

类的多态

所谓类的多态,就是指类可以有多个名称相同,参数类型类型却不同的函数。

多态实例

1 class people:
2 def __init__(self):
3 pass
4 def func(self,x):
5 print("1")
6 def func(self,x,y):
7 print("2")
8 def func(self,x,y,z):
9 print("3")

在上面的实例中,当调用people中的func()函数时,Python会默认使用带有三个参数的函数func(x,y,z)。因此,当只提供一个参数时,将会报错。

解决方法:

  对所给函数的参数个数进行判断具体是调用哪一个函数

代码如下:

 1 class people:
2 def __init__(self):
3 pass
4 def func1(self,x):
5 print("1")
6 def func2(self,x,y):
7 print("2")
8 def func3(self,x,y,z):
9 print("3")
10 def func(self,*arg):
11 if len(arg) == 1:
12 self.func1(*arg)
13 elif len(*arg == 2):
14 self.func2(*arg)
15 elif len(*arg == 3):
16 self.func3(*arg)
17 else:
18 print("Wrong Arguments")

类的封装

所谓类的封装,就是将类的属性封装在该类内,只有该类的成员才能使用该类的其他成员。这种被封装的变量与方法,称为该类的私有变量与私有方法。

python之对象与类的更多相关文章

  1. Python面象对象与类

    # -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: from collections import namedtuple from col ...

  2. Python - 面对对象(进阶)

    目录 Python - 面对对象(进阶) 类的成员 一. 字段 二. 方法 三. 属性 类的修饰符 类的特殊成员 Python - 面对对象(进阶) 类的成员 一. 字段 字段包括:普通字段和静态字段 ...

  3. Python全栈--9.1--面向对象进阶-super 类对象成员--类属性- 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理

    上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...

  4. 对于python,一切事物都是对象,对象基于类创建

    新建列表.新建string字符串 li1 = [1, 2, 3, 4] li2 = list([1, 2, 3]) s1 = "abc" s2 = str("abc&qu ...

  5. python面对对象编程----------7:callable(类调用)与context(上下文)

    一:callables callables使类实例能够像函数一样被调用 如果类需要一个函数型接口这时用callable,最好继承自abc.Callable,这样有些检查机制并且一看就知道此类的目的是c ...

  6. python面对对象编程------4:类基本的特殊方法__str__,__repr__,__hash__,__new__,__bool__,6大比较方法

    一:string相关:__str__(),__repr__(),__format__() str方法更面向人类阅读,print()使用的就是str repr方法更面对python,目标是希望生成一个放 ...

  7. python中对象、类型和元类之间的关系

    在python中对象.类型和元类构成了一个微妙的世界. 他们有在这个世界里和平共处,相辅相成.它们遵循着几条亘古不变的定律: 1.python中无处不对象 2.所有对象都有三种特性:id.类型.值 3 ...

  8. 从0开始的Python学习012数据结构&对象与类

    简介 数据结构是处理数据的结构,或者说,他们是用来存储一组相关数据的. 在Python中三种内建的数据结构--列表.元组和字典.学会了使用它们会使编程变得的简单. 列表 list是处理一组有序的数据结 ...

  9. python的类和对象(类的静态字段)

    转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...

随机推荐

  1. Netty(六)揭开 BootStrap 的神秘面纱

    6.1 客户端 BootStrap 6.1.1 Channel 简介 在 Netty 中,Channel 是一个 Socket 的抽象,它为用户提供了关于 Socket 状态(是否是连接还是断开)以及 ...

  2. Angular Learning Paths

    Angular Learning Paths Angular Expert refs https://app.pluralsight.com/search/?q=angular xgqfrms 201 ...

  3. 人物传记Daniel Bolsonaro:永远不要做一个思维单一的人

    从小经历了移民和不断辗转迁徙搬家的Daniel Bolsonaro(现就职于灵石团队,职位是核心技术架构师)知道,人生不可能只有一条路,也不要局限于只给自己设立一条路.既然父母能带自己离开巴西来到美国 ...

  4. 【从零开始撸一个App】Fragment和导航中的使用

    Fragment简介 Fragment自从Android 3.0引入开始,它所承担的角色就是显而易见的.它之于Activity就如html片段之于页面,好处无需赘述. Fragment的生命周期和Ac ...

  5. Mosquitto

    mosquitto可连接远程服务器及本地服务器. mosquitto可在一个节点内建立一个连接用于收发,也可在一个节点内建立多个连接用于收发.建立一个连接用于收发时,会有初始部分帧的延迟.(可能由于内 ...

  6. 如何使用irealtime.js实现一个基于websocket的同步画板

    同步画板演示 同时打开2个tab,分别在画布上写下任意内容,观察演示结果,同时可设置画笔颜色及线条宽度.演示地址 初始化画布 <canvas id="drawBoard" w ...

  7. 从Java的堆栈到Equals和==的比较

    以下为链接 https://www.2cto.com/kf/201503/383832.html 栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地 ...

  8. 微信小程序:picker组件实现下拉框效果

    一.wxml中代码 <view class="in_order_Param">             <text>状态:</text>     ...

  9. 微信小程序:Navigator导航组件

    导航组件:类似超链接标签. url:要跳转的页面路径,可以放绝对路径,也可以放相对路径,绝对路径指从pages作为根目录开始找到你要的页面. 找到你要找的页面的相对地址的方法:在vscode中,该页面 ...

  10. Apache支持Vue router使用 HTML5History 模式

    一.前言 前端Vue router 使用history模式,URL会比hash模式好看,这种模式要玩好,还需要后端配置支持,否则会报404错误. 注:1.前端代码省略. 2.此处后台使用Apache服 ...