海门建网站公司,西安口碑较好的财务公司,免费的室内设计网站,网页设计的定义一、面向对象编程 
1.1 面向过程与面向对象 
面向过程和面向对象都是一种编程方式#xff0c;只不过再设计上有区别。 
1.1.1 面向过程pop#xff1a; 举例#xff1a;孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃…一、面向对象编程 
1.1 面向过程与面向对象 
面向过程和面向对象都是一种编程方式只不过再设计上有区别。 
1.1.1 面向过程pop 举例孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃饭 8. 妈妈给孩子送学校去 最为典型就是我们的C语言编程。 1》导入各种外部库 2》设计各种全局变量 3》写一个函数 4》写一个函数 5》........ 6》写一个main主函数作为程序入口部分 - 面向过程的编程思想将一个功能分解为一个一个小的步骤 我们通过完成一个一个的小的步骤来完成一个程序 
- 这种编程方式符合我们人类的思维编写起来相对比较简单 
- 但是这种方式编写代码的往往只适用于一个功能 如果要在实现别的功能即使功能相差极小也往往要重新编写代码 所以它可复用性比较低并且难于维护 
优点简单直观、性能高效、代码简洁。 
缺点不易维护、不易扩展、代码重用性低。 1.1.2 面向对象oop 举例孩子上学 1》妈妈 送 孩子 上学 python、java、C都是面向对象的编程方式。 以python为例 1》导入各种库 2》设计各种全局变量 3》设计你所需要的类——妈妈类、孩子类 4》main主函数可有可无 - 面向对象的编程思想将所有的功能统一保存到对应的对象中 比如妈妈功能保存到妈妈的对象中孩子的功能保存到孩子对象中 。要使用某个功能直接找到对应的对象即可 
- 这种方式编写的代码比较容易阅读并且比较易于维护容易复用。 
- 但是这种方式编写不太符合常规的思维编写起来稍微麻烦一点 
优点模块化、安全性高、代码重用性高。 
缺点学习难度大、性能开销大、调试困难。 1.2 类 和 对象 
目前我们所学的python中的内置类型都是对象——内置对象内置对象有时候不能满足我们的需求需要自定义一些对象。 
10 20 30 -40 a10, b20等等等都是整数对其进行抽象——int类。 
python 中一切都是对象。 
类也是一个对象。 1.2.1 类的定义 与 实例化对象 
语法格式1
class ClassA:# 公共的属性def __init__(self):passdef fun1(self):passdef fun2(self):pass语法格式2
class ClassA(object):# 公共的属性def __init__(self):passdef fun1(self):passdef fun2(self):pass实例化对象的语法1》无参对象名  类名()2》有参对象名  类名(参数列表)                                      
例举  
# 设计类
class student:name  Noneage  Nonegander  None
# 创建对象
student1  student()
# 给对象赋值
student1.name  小明
student1.age  18
student1.gender  男
# 获取对象中的信息
print(student1.name,student1.age,student1.gander) 
1.2.2 访问属性/方法 
使用符号 . 进行访问 # 访问属性 对象名.属性 # 访问方法 对象名.方法名() 1.2.3 对象与类的关系【1】 
对象拥有类的所有属性和方法对象的属性和方法可以单独添加、删除、修改对象与对象之间的属性和方法不可共享对象不能独自创建必须依托于类类可以实例化N个对象 
#创建一个闹钟类
class clock:id  Noneprice  Nonedef ring(self):import winsound #python内置模块是让电脑响    winsound.Beep(2000,3000)#频率和时间print(f电脑编号{self.id},电脑价格{self.price})
#闹钟1
clock1  clock()
clock1.id 12344
clock1.price  19.99
clock1.ring()#闹钟2
clock2  clock()
clock2.id  12345
clock2.price  29.99
clock2.ring() 
1.2.3 对象与类的关系【2】 from types import MethodTypeclass student:def __init__(self,name):self.name  namedef fun1(self):print(f{self.name}会唱歌)s1  student(刘)
s2  student(坤哥)s1.fun1()#刘会唱歌
s2.fun1()#坤哥会唱歌def Ctrl(self):print(f{self.name}会穿背带裤打篮球)s2.CtrlMethodType(Ctrl,s2)s2.Ctrl()#坤哥会穿背带裤打篮球还可以使用以下函数的方式来访问属性 
getattr(obj, name[, default]) : 访问对象的属性。hasattr(obj,name) : 检查是否存在一个属性。setattr(obj,name,value) : 设置一个属性。如果属性不存在会创建一个新属性。delattr(obj, name) : 删除属性。 1.2.5 魔方方法——构造函数 与 析构函数 
__init__ 构造函数完成对象的初始化工作方便统一管理、调用类创建对象时自动执行。__del__ 析构函数删除对象时执行一些操作自动执行。__str__ 打印方法输出执行信息自动执行。 
class Animal:#构造函数def __init__(self,name,call):self.name  nameself.call  call#打印方法def __str__(self):return f{self.call},你在{self.name}叫什么#析构函数def __del__(self):print(f{self.name}消音成功)dog  Animal(狗,汪汪汪)
cat  Animal(猫,喵喵喵)print(dog)
print(cat)汪汪汪,你在狗叫什么
喵喵喵,你在猫叫什么
狗消音成功
猫消音成功1.2.6 类属性/方法 与 实例对象属性/方法 与 静态方法 class Bank(object):定义了一个银行卡类用于初始化、存钱、取钱total_money  0def __init__(self, name, money):self.name  nameBank.total_money  money    #改为self.def save(self, money):Bank.total_money  moneydef draw(self, money):Bank.total_money - moneyb1  Bank(张三, 1000)
print(b1.total_money)
b1.save(5000)
print(b1.total_money)
b1.draw(3000)
print(b1.total_money)b2  Bank(李四, 8888)
print(b2.total_money)
b2.save(10000)
print(b2.total_money) 
类方法、实例方法、静态方法 
class student:#定义一个学生类grade  py24101classmethoddef clas_fun(cls):类方法中只能调用类属性和类方法print(cls.grade)def __init__(self,name,age):self.name  nameself.age  agedef fun1(self):实例方法中能调用类属性、实例属性print(f实例方法中输出类属性{self.grade}, 输出实例属性{self.name})staticmethoddef sta_fun(x):print(f{x}静态方法一般实现与类和对象无关联的操作例如游戏说明书等)s1  student(小明,18)
#调用类方法
#方法一
student.clas_fun()#py24101
#方法二
s1.clas_fun()#py24101#如何调用实例对象
#方法一
student.fun1(s1)#实例方法中输出类属性py24101, 输出实例属性小明
#方法二
s1.fun1() #实例方法中输出类属性py24101, 输出实例属性小明# 如何调用静态变量
#方法一
student.sta_fun(2)#2静态方法一般实现与类和对象无关联的操作例如游戏说明书等
#方法二
s1.sta_fun(2) #2静态方法一般实现与类和对象无关联的操作例如游戏说明书等1.2.7 Python的内置类属性 
__dict__ : 类的属性包含一个字典由类的数据属性组成__doc__ :类的文档字符串__name__: 类名__module__: 类定义所在的模块类的全名是__main__.className如果类位于一个导入模块mymod中那么className.__module__ 等于 mymod__bases__ : 类的所有父类构成元素包含了一个由所有父类组成的元组 
class Student(object):定义一个学生类属性名字 年龄方法method_1 method_2name  张三age  18def method_1(self):passdef method_2(self):passprint(Student.__dict__)
print(Student.__doc__)
print(Student.__name__)
print(Student.__module__)
print(int.__module__)
print(Student.__bases__){__module__: __main__, __doc__: \n    定义一个学生类\n    属性名字 年龄\n    方法method_1 method_2\n    , name: 张三, age: 18, method_1: function Student.method_1 at 0x0000023EBF1A4AE0, method_2: function Student.method_2 at 0x0000023EBF1A4C20, __dict__: attribute __dict__ of Student objects, __weakref__: attribute __weakref__ of Student objects}定义一个学生类属性名字 年龄方法method_1 method_2Student
__main__
builtins
(class object,)1.3 类的封装【私有属性与方法】 
封装是类的三大特性之一。 
封装指的是隐藏对象中一些不希望让外部所访问的属性或方法。 
python中封装其实是通过设置访问权限来体现的私有属性和私有方法是控制访问权限的组成部分。 
1.3.1 私有属性 
在类的内部使用不希望外部直接访问的变量。 
在python中使用双下划线作为前缀来定义私有属性。 
私有属性在类外不能访问 
class bank:def __init__(self,name,pwd):self.name  nameself.__pwd  pwd# 为了在某些需要的时候访问到私有属性所以需要在类内部设置两个接口def get_pwd(self):return self.__pwddef set_pwd(self,newpwd):self.__pwd  newpwduser  bank(小明,123456)print(user.name)#小明
# print(user.__pwd) 会报错
print(user.get_pwd())#123456
user.set_pwd(456789)
print(user.get_pwd()) #456789 1.3.2 私有方法 
和私有属性是一样的。 
class Bank(object):定义了一个银行卡类属性name     pwd密码【我不希望外部访问】def __init__(self, name, pwd):self.name  nameself.__pwd  pwddef __info(self):print(f名字{self.name}, 密码{self.__pwd})def get_info(self):self.__info()# Bank.__info() 报错
b1  Bank(李四, 123456)
# b1.__info()   报错
b1.get_info() 1.3.3 属性装饰器 
属性装饰器是实现把方法转为属性的装饰器。 
作用 
把方法转为属性便于操作属性实现对属性的更改验证、查看、删除 class 类名         def __init__(self,name):                 self.name  name         property         def 函数名(self):                 return self.name         函数名.setter         def 函数名self,m                 self.name m           class bank:def __init__(self,name ,money  0): #可以在里面定义初始值self.name  nameself.__money  moneypropertydef my_money(self):return self.__moneymy_money.setterdef my_money(self,m):self.__moneymuser  bank(小明,1000)user.my_money  900
print(user.my_money) #19001.4 类的继承 
面向对象的编程带来的主要好处之一就是代码的重用实现这种重用的方法之一就是通过继承机制。 
通过继承创建的新类称之为【子类】或者【派生类】被继承的类称之为【父类】、【基类】、【超类】。 
1.4.1 继承语法格式 class 子类名(父类名列表):         pass class Parent(object):定义父类par_attr  100def __init__(self):print(初始化父类)def par_fun1(self):print(父类方法1)def par_fun2(self):print(父类方法2)class Child(Parent):定义子类child_attr  666def __init__(self):print(初始化子类)def child_fun1(self):print(子类方法1)c1  Child()
print(c1.child_attr)
c1.child_fun1()print(c1.par_attr)
c1.par_fun1()
c1.par_fun2() 1.4.2 多继承语法【明白即可不建议乱用】 
如果在继承的元组里面有一个以上的类就称之为多继承 
class a:pass
class b:pass
class c:pass
class d(a,b,c):passD  d()
print(d.mro())#[class __main__.d, class __main__.a, class __main__.b, class __main__.c, class object] 查顺序
print(d.__bases__) #(class __main__.a, class __main__.b, class __main__.c)查父类 
。 
1.4.3 继承重写父类方法 
如果你的父类方法不能满足你得要求你可以在之类中重写父类的方法。 
# 重写
class Parent(object):def method(self):print(f{self}的方法)class Child(Parent):def method(self):print(xxxxxxxxxx)print(f子类重写父类ri{self}的方法)c  Child()
c.method() 这里列出了一些通用的功能可以在自己的类重写 __init__ ( self [,args...] )构造函数  简单的调用方法: obj  className(args)  __del__( self ) 析构方法  简单的调用方法 : del obj  __repr__( self ) 转化为供解释器读取的形式  简单的调用方法 : repr(obj)  __str__( self ) 用于将值转化为适于人阅读的形式  简单的调用方法 : str(obj)  __cmp__ ( self, x ) 对象比较  简单的调用方法 : cmp(obj, x)  1.4.4 python继承特点 
在子类中如果需要父类的构造方法需要显式调用父类的构造方法或者不重写父类的构造方法。__init__()在子类中调用父类的方法需要显式调用且第一个参数self不能省略 
不重写父类构造方法  
class father:def __init__(self,x,y):self.x  xself.y  ydef sum(self):print(f{self.x},{self.y})class child(father):def fun(self):print(f{self.x},{self.y})stu  child(1,2)
stu.fun() #1,2 重写父类构造方法、里面显式调用父类构造方法 
class father:def __init__(self,x,y):self.x  xself.y  yclass child(father):def __init__(self,x,y,z):father.__init__(self,x,y)self.z  zdef fun(self):print(self.x,self.y,self.z)
stu  child(1,2,3)
stu.fun() #1,2,3用super().方法/成员变量 
class father:def __init__(self,x,y):self.x  xself.y  yclass child(father):def __init__(self,x,y,z):super().__init__(x,y)self.z  zdef fun(self):print(self.x,self.y,self.z)
stu  child(1,2,3)
stu.fun() #1,2,31.4.5 运算符重载 
在Python中并没有像其他语言如C中那样的内置机制来重载运算符。但是你可以通过定义特定的方法来模拟运算符重载的行为。 
以下是一些常见运算符以及它们对应的特殊方法 
加法 对应 __add__ 
减法- 对应 __sub__ 
乘法* 对应 __mul__ 
除法/ 对应 __truediv__ 
取模% 对应 __mod__ 
幂运算** 对应 __pow__ 
位运算 
位运算 对应 __rshift__ 
位运算 对应 __and__ 
位运算| 对应 __or__ 
位运算^ 对应 __xor__ class a:def __init__(self,x):self.x  xdef __add__(self, other):return self.x  other.x
b  a(3)
c  a(4)
print(bc) #7class d:def __init__(self,x,y):self.x  xself.y  ydef __add__(self, other):return self.x*other.yself.y*other.xe  d(2,3)
f  d(4,5)
print(ef)#221.5 类的多态 
python中的多态也可以通过方法重写进行。 
同一个方法不同对象显式的结果不同 class Animal:def speak(self):pass
class Dog(Animal):def speak(self):print(汪汪汪)
class Cat(Animal):def speak(self):print(喵喵喵)def Animal_speak(animal:Animal):animal.speak()dog  Dog()
cat  Cat()Animal_speak(dog)#汪汪汪
Animal_speak(cat)#喵喵喵 1创建学生类Person。 2添加静态方法showInfo: 1显示信息“龙的传人”; 3添加类属性country国籍默认值为“中国“。 4添加类属性nation民族默认值为“汉族“。 5添加构造方法添加如下对象属性 1name保存学生姓名默认值为空字符串。 2age保存学生年龄默认值为0。 3birth保存出生日期默认值为空字符串。 4money保存工资收入私有权限默认值为0。 6添加类方法获取两个类属性的值。 7添加魔法方法将所有属性用格式化字符串组合成一个字符串后返回。 1格式如下 国籍中国 民族汉 姓名XXX 年龄XXX 出生日期XXX 8添加setName方法修改对象属性name。 9添加getName方法获得对象属性name的值。 10添加返回age值的方法getAge利用属性装饰器修饰该方法并对age值进行修改。 11添加setBirth方法修改对象属性birth。 12添加getBirth方法获得对象属性birth的值。 13添加私有属性money的set和get方法。 14添加对象方法info输出当前对象的个人信息 1格式如下姓名—年龄—出生日期—存款 15添加主程序入口完成如下任务 1调用静态方法 ①提示通过对象调用 ②提示通过类名调用 2创建一个对象。 3修改对象的所有对象属性。 4通过对象方法获得对象的所有属性值并显示。 5调用info显示对象信息。 6调用对象的打印方法输出信息 7再次修改所有对象的属性。 8再次调用对象的打印方法。 from tkinter.font import namesclass Person:country  中国nation  汉族staticmethoddef showInfo():print(龙的传人)def __init__(self,name  ,age  0,birth  ,money  0):self.name  nameself.age  ageself.birth  birthself.__money  moneyclassmethoddef func(cls):print(cls.country,cls.nation)def __str__(self):return f 国籍:{self.country} \n 民族:{self.nation} \n 姓名:{self.name} \n 年龄:{self.age} \n 出生日期:{self.birth}def setName(self,name):self.name  namedef getName(self):print(self.name)propertydef getAge(self):return self.agegetAge.setterdef getAge(self,newage):self.age  newagedef setBirth(self):return self.birthdef getBirth(self,birth):self.birth  birthdef set_money(self):return self.__moneydef get_money(self,money):self.__money  moneydef info(self):print(f姓名:{self.name} 年龄:{self.age} 出生日期:{self.birth} 存款:{self.__money})user  Person()
user.showInfo()
user.setName(张三)
user.getAge  25
user.getBirth(1999-09-30)
user.get_money(20000)
user.info()
print(user)
user.setName(小明)
user.getAge  19
user.getBirth(2005-07-30)
user.get_money(2000)
print(user) 文章转载自: http://www.morning.cfcpb.cn.gov.cn.cfcpb.cn http://www.morning.ntzfl.cn.gov.cn.ntzfl.cn http://www.morning.rtbhz.cn.gov.cn.rtbhz.cn http://www.morning.bkqw.cn.gov.cn.bkqw.cn http://www.morning.dzrcj.cn.gov.cn.dzrcj.cn http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn http://www.morning.frmmp.cn.gov.cn.frmmp.cn http://www.morning.langlaitech.cn.gov.cn.langlaitech.cn http://www.morning.pudejun.com.gov.cn.pudejun.com http://www.morning.beijingzy.com.cn.gov.cn.beijingzy.com.cn http://www.morning.krxzl.cn.gov.cn.krxzl.cn http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn http://www.morning.mlyq.cn.gov.cn.mlyq.cn http://www.morning.kldtf.cn.gov.cn.kldtf.cn http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn http://www.morning.zqmdn.cn.gov.cn.zqmdn.cn http://www.morning.tqpds.cn.gov.cn.tqpds.cn http://www.morning.pxspq.cn.gov.cn.pxspq.cn http://www.morning.pqppj.cn.gov.cn.pqppj.cn http://www.morning.nmfxs.cn.gov.cn.nmfxs.cn http://www.morning.hwnnh.cn.gov.cn.hwnnh.cn http://www.morning.rxcqt.cn.gov.cn.rxcqt.cn http://www.morning.wrlcy.cn.gov.cn.wrlcy.cn http://www.morning.fsnhz.cn.gov.cn.fsnhz.cn http://www.morning.ljzqb.cn.gov.cn.ljzqb.cn http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn http://www.morning.lpgw.cn.gov.cn.lpgw.cn http://www.morning.pqnpd.cn.gov.cn.pqnpd.cn http://www.morning.jrgxx.cn.gov.cn.jrgxx.cn http://www.morning.lcbnb.cn.gov.cn.lcbnb.cn http://www.morning.kghhl.cn.gov.cn.kghhl.cn http://www.morning.xkzr.cn.gov.cn.xkzr.cn http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn http://www.morning.errnull.com.gov.cn.errnull.com http://www.morning.rnnwd.cn.gov.cn.rnnwd.cn http://www.morning.bdqpl.cn.gov.cn.bdqpl.cn http://www.morning.lgsfb.cn.gov.cn.lgsfb.cn http://www.morning.yhljc.cn.gov.cn.yhljc.cn http://www.morning.cbnlg.cn.gov.cn.cbnlg.cn http://www.morning.xdpjf.cn.gov.cn.xdpjf.cn http://www.morning.qyjqj.cn.gov.cn.qyjqj.cn http://www.morning.mxlmn.cn.gov.cn.mxlmn.cn http://www.morning.nhpmn.cn.gov.cn.nhpmn.cn http://www.morning.rwpfb.cn.gov.cn.rwpfb.cn http://www.morning.xkjrq.cn.gov.cn.xkjrq.cn http://www.morning.lxfdh.cn.gov.cn.lxfdh.cn http://www.morning.mbfj.cn.gov.cn.mbfj.cn http://www.morning.zyrp.cn.gov.cn.zyrp.cn http://www.morning.btpzn.cn.gov.cn.btpzn.cn http://www.morning.pyzt.cn.gov.cn.pyzt.cn http://www.morning.sfwd.cn.gov.cn.sfwd.cn http://www.morning.frpb.cn.gov.cn.frpb.cn http://www.morning.rdwm.cn.gov.cn.rdwm.cn http://www.morning.qdxkn.cn.gov.cn.qdxkn.cn http://www.morning.dsprl.cn.gov.cn.dsprl.cn http://www.morning.zdgp.cn.gov.cn.zdgp.cn http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn http://www.morning.yrfxb.cn.gov.cn.yrfxb.cn http://www.morning.glnmm.cn.gov.cn.glnmm.cn http://www.morning.pqcbx.cn.gov.cn.pqcbx.cn http://www.morning.qxwwg.cn.gov.cn.qxwwg.cn http://www.morning.qfmcm.cn.gov.cn.qfmcm.cn http://www.morning.lqrpk.cn.gov.cn.lqrpk.cn http://www.morning.skbkq.cn.gov.cn.skbkq.cn http://www.morning.xrsqb.cn.gov.cn.xrsqb.cn http://www.morning.qbfkz.cn.gov.cn.qbfkz.cn http://www.morning.bpmnl.cn.gov.cn.bpmnl.cn http://www.morning.yksf.cn.gov.cn.yksf.cn http://www.morning.kxbry.cn.gov.cn.kxbry.cn http://www.morning.grbgn.cn.gov.cn.grbgn.cn http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn http://www.morning.ntgjm.cn.gov.cn.ntgjm.cn http://www.morning.mjjty.cn.gov.cn.mjjty.cn http://www.morning.qmzwl.cn.gov.cn.qmzwl.cn http://www.morning.nwqyq.cn.gov.cn.nwqyq.cn http://www.morning.mlpch.cn.gov.cn.mlpch.cn http://www.morning.qsmch.cn.gov.cn.qsmch.cn http://www.morning.kbfzp.cn.gov.cn.kbfzp.cn http://www.morning.rzcfg.cn.gov.cn.rzcfg.cn http://www.morning.qrqg.cn.gov.cn.qrqg.cn