www.4688.comPython开发基础-Day17面向对象编程介绍、类和目的

www.4688.com 1

目的里通用的数量和函数是引用类的名号空间

www.4688.com 2

而p1的体系为<class
‘__main__.Chinese’>,假诺查阅Chinese的类型会发觉和p1的同样,也就是说定义一个类也就是概念了一个品种。

www.4688.com 3

结果发现:每个实例都没有obj_list,可是却有count,一个是可变,一个是不可变,所以类里可变的数据obj_list可以从来被涂改,内存id不会转移,而不可变的数额count只好被重复统计,开辟新的内存空间举行引用,是树立在对象的性质中,而非类的性质

www.4688.com 4

面向过程编程

www.4688.com 5

p1.__dict__出口的结果为__init__函数所实施后的结果,而__init__函数的职务参数有两个self,name,sex,age,实例化的过程中传播了’zhangsan’,’man’,73六个参数对应name,sex,age,而self也是一个岗位参数,函数部分我们通晓地点参数必须要传入值,这里代码自动会把值p1传入,也就是实例的名字p1。

 

概念函数:通过def关键字

 

代码定义:__init__函数和self会在底下表达

 我依照windows的,QT版本除了32\64还分为opengl和非opengl,百度了一下
Opengl和非opengl的界别
好像就是支撑opengl开发的原生库的距离。重要要留意32、64位的问题,对应的vs的版本的题材,因为工程编译的时候需要用到安装包里面的include和bin所以32位\64位要和编译目的平台匹配正确。(2014/9/11
关于非opengl和opengl版本的问题,明天找到的答案是:底层前者用的是DirectX,后者用的是OpenGL,但在上层接口上都是OpenGL接口,所以对于前者多了个由OpenGL到DirectX的接口封装。)

首先分析中国人的表征,首先国籍必须是属于中国,然后还若是私家,那么人都会做哪些(吃喝拉撒睡说话)等等,另外每个人还有投机故意的习性,比如名字身高生日等

6.一路next
,QT程序就建好了。下边需要安装QT工程版本那个很要紧,设置好之后就毫无再安装引用库路径等东西。项目右键设置。

着力是经过(流水线式思维),过程即解决问题的步骤,面向过程的筹划就好比精心设计好一条流水线,考虑系数什么日期处理什么东西。紧要运用在一旦完成很少修改的地点,如linux内核、git、apache服务器等

1.下载QT,http://qt-project.org/downloads

类的数据属性可以增删查改

很久不写小说了,真是越来越懒。目前铺面要做一款产品,想拔取QT不用WPF
lol,让苦逼的.net的本人来搞,话不多说上硬货。

定义类:通过cless关键字,类的名字一般始于大写,为了和函数区分

3.全安装好将来在vs里面安装QT的条件音信。

对象自我并没有函数属性,唯有自有的数据属性(__init__函数初叶化的特性或者手动添加的特性),但是足以经过类调用到,也就是集体所有的表征和总体性

4.在vs中新建项目,

对象的概念

按部就班自己要编译的目的平台选好QT版本,里面的枚举值来源于第3步。然后就是编译了运行了。:)

结果发现:类里面定义的函数只是给目的用的,类本身不可能运用那么些函数。类定义的只是办法,而艺术是给目的绑定的

此处可以观望自己装了六个版本的QT 一个32 一个64 对应编译到32 64六个阳台。

1 print(p1.language)      #p1本身并没有language属性,但是可以查到,自己本身虽然没有,但是从类里可以拿到
2 # print(p1.run())       #报错,因为自己和类里都没有这个属性
3 print(p1.work())
4 p1.city='beijing'       #增加一条属性,只是针对与对象本身,会增加到p1的属性字典里,不会对Chinese有影响
5 del p1.city             #删除一条属性

www.4688.com 6

类的概念

5.弹出向导,修改自己想要的性质(类名、预制模块),这里要留意自身并未勾选预编译头因为勾选了未来编译不通过=。=

1 '''
2 class 类名:
3     '类的文档字符串'
4     类体
5 '''
6 #我们创建一个类Data类,
7 class Data:
8     pass 

  如故官网页面,翻滚到最上边 other download 里面有插件下载。

实例化(生成实例):__init__函数和self说明

就到这里,下一篇讲解简单的配置QT程序涉及 倚重dll的查找 还有QT plugins
dll的配备。

在现实生活中,先有目的后有类,比如先有的人,后局部人类的定义,而在编程中,是先有的类,后有些对象,类生成对象。

2.QT VS插件 http://qt-project.org/downloads/

优点:解决了先后的可扩展性差的题目,对某一个对象修改会立即反映到方方面面程序连串,如lol对一个勇于属性的改动(万年削弱从未被提升)

对象的性质,优先从友好的__dict__字典里找,假设自己的字典里不曾,访问类里的,尽管类里也尚未,报错,自己定义的性质对其他引用了类的等同属性没有影响

 1 class Chinese:
 2     # 共同的特征:国籍和语言
 3     country = 'China'
 4     language = 'chinese'
 5     # __init__(p1, 'zhangsan', 'man', 73)
 6     def __init__(self,name,sex,age):
 7         #只用于初始化的活,不能有返回值,用于定义特有的属性
 8         self.name=name #p1.name='zhangsan'
 9         self.sex=sex #p1.sex='man'
10         self.age=age #p1.age=73
11     # 共同的技能
12     def talk(self):
13         print('is talking')
14     def eat(self):
15         print('is eating')
16     def sleep(self):
17         print('is eating')
18     def work(self):
19         print('is working')

目的的用法:

1 p1=Chinese('zhangsan','man',73)     #生成一个实例,name='zhangsan'  sex='man'  age=73
2 print(p1.__dict__)       #以字典的方式返回p1的属性,不包含类的共同属性,只有name/sex/age
1 def functionName(args):
2      '函数文档字符串'
3       函数体 

对象也号称实例,是由此类爆发的,对象就是数码属性和方法属性的结合体,比如lol中的英雄,一个勇于就是一个目的,具备生命值、蓝条攻击力等数码属性,又颇具qwer两个技巧属于方法属性。

 1 class Chinese:
 2     obj_list=[]
 3     count=0
 4     country = 'China'
 5     language = 'chinese'
 6     def __init__(self,name,sex,age):
 7         self.name=name
 8         self.sex=sex
 9         self.age=age
10         Chinese.obj_list.append(name)  #每次实例化,Chinese类都往obj_list中添加一个实例名字
11         Chinese.count+=1    #每次实例化,Chinese都将count+1
12     def sleep(self):
13         print('is eating')
14     def work(self):
15         print('is working')
16 p1=Chinese('bob','man',18)
17 p2=Chinese('natasha','woman',28)
18 p3=Chinese('hurry','man',10)
19 print(p1.obj_list,p1.__dict__)
20 print(p2.obj_list,p2.__dict__)
21 print(p3.obj_list,p3.__dict__)
22 print(Chinese.obj_list)
23 #######分割线君#######
24 print(p1.count,id(p1.count))
25 print(p2.count,id(p2.count))
26 print(p3.count,id(p3.count))
27 print(Chinese.count,id(Chinese.count))
28 
29 输出结果
30 ['bob', 'natasha', 'hurry'] {'name': 'bob', 'sex': 'man', 'age': 18}
31 ['bob', 'natasha', 'hurry'] {'name': 'natasha', 'sex': 'woman', 'age': 28}
32 ['bob', 'natasha', 'hurry'] {'name': 'hurry', 'sex': 'man', 'age': 10}
33 ['bob', 'natasha', 'hurry']
34 3 1818604672
35 3 1818604672
36 3 1818604672
37 3 1818604672

面向对象变成介绍

结论:

对象的属性引用:

1 print(Chinese.__dict__)         #以字典的方式返回Chinese的所有属性,或者用dir(类名)查询
2 print(Chinese.language)         #查看Chinese的language属性
3 print(Chinese.work)         #查看Chinese的work属性
4 Chinese.language='putonghua'    #修改类的language属性
5 Chinese.complexion='yellow'     #增加一条肤色属性
6 del Chinese.complexion          #删除肤色属性

伪代码分析(只是分析):

面向对象编程:不是编程的一切,只是用来缓解软件可增加性的

类和对象

指标的数据属性可以增删查改

类名加上括号就是一个实例化的历程,以上生成了一个号称p1的靶子

 1 class Chinese:
 2     country = 'China'
 3     language = 'chinese'
 4     def __init__(self,name,sex,age):
 5         self.name=name
 6         self.sex=sex
 7         self.age=age
 8     def sleep(self):
 9         print('%s is eating' %self.name)
10     def work(self):
11         print('%s is working' %self.name)
12 p1=Chinese('bob','man',18)
13 p2=Chinese('natasha','woman',28)
14 # Chinese.work()    #抛出TypeError
15 p1.work()
16 p2.work()
17 #输出结果
18 bob is working
19 natasha is working

类富含了一组对象的一模一样属性部分,依旧说lol中的英雄,所有的英雄都著名字、标签(坦克战士法师)、生命值、蓝条攻击力等,尽管实际的值不同,可是都得以分包在类中去变通。

示范:定义一个中国人的类

1 print(p1.__dict__,type(p1))
2 #输出结果为
3 {'name': 'zhangsan', 'sex': 'man', 'age': 73} <class '__main__.Chinese'>
class Chinese:
    obj_list=[]
    count=0
    country = 'China'
    language = 'chinese'
    def __init__(self,name,sex,age):
        self.name=name
        self.sex=sex
        self.age=age
        self.obj_list.append(name)  #每次实例化,实例都往pbj_list中添加一个名字
        self.count+=1          #每次实例化,实例都将count+1
    def sleep(self):
        print('is eating')
    def work(self):
        print('is working')
p1=Chinese('bob','man',18)
p2=Chinese('natasha','woman',28)
p3=Chinese('hurry','man',10)
print(p1.obj_list,p1.__dict__)
print(p2.obj_list,p2.__dict__)
print(p3.obj_list,p3.__dict__)
print(Chinese.obj_list)
#######分割线君#######
print(p1.count,id(p1.count))
print(p2.count,id(p2.count))
print(p3.count,id(p3.count))
print(Chinese.count,id(Chinese.count))

输出结果:
['bob', 'natasha', 'hurry'] {'name': 'bob', 'sex': 'man', 'age': 18, 'count': 1}
['bob', 'natasha', 'hurry'] {'name': 'natasha', 'sex': 'woman', 'age': 28, 'count': 1}
['bob', 'natasha', 'hurry'] {'name': 'hurry', 'sex': 'man', 'age': 10, 'count': 1}
['bob', 'natasha', 'hurry']
1 1818604608
1 1818604608
1 1818604608
0 1818604576

 

结果发现:在实例化的历程中,类本身做的属性修改操作,不会对目的造成其他影响,所有的对象都不带有count属性和obj_list属性,都是由此类去调用的。

缺陷:可增加性差,改动一个地点很可能要改四个地方,牵一发而动全身

在python中,用变量表示是多少属性,用函数表示方法属性。

声称一个类:和函数的定义类似

缺陷:可控性差,无法预测程序执行结果,如lol每局游戏的结果

主题是目的(上帝式思维),对象作为程序的骨干单元,一个对象涵盖了数码和操作数据的函数。面向对象就是把电脑程序当做一个对象集合,每隔对象都能接受其他对象传来的信息,统计机程序的履行就是就是一密密麻麻音信在一一对象之间传递。重要使用在需要日常变化的软件,一般要求的生科隆汇集在用户层,互联网选拔,公司中间软件,游戏等

类的习性引用:

chinese
# 例如共有属性有
country='china' #国籍中国
language='chinese'  #语言为中文,地方语言、少数民族语言可列为特有属性
# 会的技能
def talk(self):
    print('is talking')
def eat(self):
    print('is eating')
def sleep(self):
    print('is eating')
def work(self):
    print('is working')
# 等一系列人类含有的技能

#特有属性
name=name
age=age
sex=sex

优点:极大的骤降了程序的设计复杂度

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website