博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面向对象编程基本规则
阅读量:4973 次
发布时间:2019-06-12

本文共 4570 字,大约阅读时间需要 15 分钟。

Agenda

面向对象思想

类的定义

属性

  属性修饰器

方法

  操作符重载

继承和多态

  封装、继承、多态

 

面向过程、面向对象、面向函数

 

面向对象的思想,用类和对象对现实世界进行抽象

类:对事物的抽象

对象:是类的一个实例

 

类的组成:有变量和函数组成(属性、方法)

变量:属性、成员属性、是对数据的封装

函数:方法、成员方法、是对行为的封装

 

对象的组成:对象是由类实例化后得到的,所以也由属性和方法组成

 

面向对象的3大特点

  封装、继承、多态

 

类的定义

  class关键字定义类,类的首字母大写,习惯问题

  类内有属性和方法

  class Dog():

    属性定义

    方法定义

  调用类型  变量名=类名()

1 class Dog():2     pass3 wangcai=Dog()4 print wangcai
View Code

  经典类

    类型

  新式类

    __new__

    super

    __slot__

  

  区分方式:type(calss name)

    新式类:type

    经典类:classobj

1 class Dog: 2     pass 3 class DognNew(object): 4     pass 5 print type(Dog),type(DognNew) 6 class hebei(Dog): 7     pass 8 class jinmao(DognNew): 9     pass10 print type(hebei),type(jinmao)
View Code

 

定义类

  属性:数据封装

    类属性

      类共同拥有的属性,类中定义

      放到类中记录

    实例属性

      类中def定义

      放到实例中记录

    属性的可见性

      公有属性

      内置属性

      私有属性

        dir(实例名)

  方法:对类的行为的封装

    实例方法:self关键字,通过self访问实例属性,调用实例方法

    特殊方法:编译器自动添加的方法,self关键字

    静态方法:@staticmethod

    类方法:@classmethod

  #Chinese继承自Person

  clss Chinese(Person):

    nation='china'

    def __init__(self,name):

      self.__name__=name

    def msg(self):

      print self.name

1 # !/usr/bin/python 2 # encoding:utf8 3  4  5  6 class Person(): 7     pass 8 class Chinese(Person): 9     """10     author:tester11     """12     native='China'13     def __init__(self,name,age,sex):14         self.name=name15         self._age=age16         self.__sex=sex17     def __updatemethod(self):18         self.name +='updated'19         self._Chinese__sex +='updated'20         return self21 22 zhang=Chinese('zhangname','zhangage','zhangsex')23 print dir(Chinese)24 print dir(zhang)25 print zhang.name,zhang._age,zhang._Chinese__sex26 27 print zhang._Chinese__updatemethod()28 # 直接更新实例zhang的所有数据29 print zhang.name,zhang._age,zhang._Chinese__sex
View Code

访问属性

  直接访问

  自定义get、set方法

  通过属性修饰器

    @property

    @***.setter

    @***.deleter

  描述符

    代码重用

 

1 class Person(): 2     pass 3 class Chinese(Person): 4     """ 5     author:tester 6     """ 7     native='China' 8     def __init__(self,name,age,sex): 9         self.name=name10         self._age=age11         self.__sex=sex12     def __updatemethod(self):13         self.name +='updated'14         self._Chinese__sex +='updated'15         return self16     def getname(self):17         return self.name18     def setname(self,name):19         self.name=name20     @property21     def Age(self):22         return self._age23     @Age.setter24     def Age(self,age):25         self._age=age26     @Age.deleter27 #這里的代码有问题,还需要处理28     def Age(self):29         print '屌丝……年轮是可以删除的吗?!'30         # del self._age31 32 zhang1=Chinese('zhang1name','zhang1age','zhang1sex')33 print zhang1.getname()34 zhang1.setname('zhang1')35 # print zhang1.getname()36 # print zhang1.Age37 # zhang1.Age=3038 # print zhang1.Age39 print zhang1.Age40 # print dir(zhang1)41 #這里的代码有问题,还需要处理42 # del zhang1._age43 print zhang1.Age44 # print zhang1.name,zhang1._age,zhang1._Chinese__sex
View Code

 

方法

  实例方法:self做第一个参数,被绑定到对象本身,self指向对象本身的指针

    分公有和私有

  特殊方法(内置方法):__init__\__str__\__cmp__

  类方法:用@classmethod装饰器修饰,第一个参数是cls,被绑定到类,单例模式

  静态方法:用@staticmethod装饰器修饰,无self或者cls参数,没有绑定,相当于普通函数

 

1 # !/usr/bin/python 2 # encoding:utf8 3  4  5  6 class Person(): 7     pass 8 class Chinese(Person): 9     native='China'10     def __init__(self,id,name,address,age,city):11         self.name=name12         self.id=id13         self.age=age14         self.address=address15         self.city=city16     @classmethod17     def getPeoplebyParent(cls,sibling):18         if sibling==1:19             return cls(1,'huang','address',12,'city')20         else:21             print '无对应关系'22     @classmethod23     def getPeoplebysSibling(cls,sibling):24         if sibling ==None:25             print 'shangdi'26         else:27             return cls(1,'huang2','address',12,'city')28     @staticmethod29     def someone():30         pass31 zhang=Chinese.getPeoplebyParent(1)32 try :33     print zhang.name34 except AttributeError:35     print '无对应关系,shib'36 37 huang=Chinese.getPeoplebysSibling('')38 try :39     print huang.name40 except AttributeError:41     print '无对应关系,shib'
View Code

运算符重载

  构造函数、析构函数

    __new__\__init__\__del__

  四则运算:+-*/

    __add__\__sub__\__mul__\__div__

  比较运算

    __lt__\__gt__\__cmp__

  其他

    __str__\__repr__\__contains__\__bool__

 

 

继承和多态

继承

  根据已有的类,定义新的类

  继承的目的:代码重用、多态

  调用父类的方法:父类.方法名(self);super(子类名,self).方法名()

多重继承

菱形继承问题

  经典类:深度优先

  新式类:广度优先

  super.(子类名.self)

 

实现向量的加乘

  加常量

  两个向量相加

  乘常量

  两个向量相乘

  两个向量的点集

转载于:https://www.cnblogs.com/studytester/p/6418848.html

你可能感兴趣的文章
微信小程序去除button默认样式
查看>>
11/26
查看>>
Where does Visual Studio look for C++ Header files?
查看>>
Java打包可执行jar包 包含外部文件
查看>>
Docker容器运行ASP.NET Core
查看>>
WPF图片浏览器(显示大图、小图等)
查看>>
.Net码农学Android---系统架构和基本概念
查看>>
Windows Phone开发(37):动画之ColorAnimation
查看>>
DevExpress的Web控件汉化方法
查看>>
js中escape,encodeURI,encodeURIComponent 区别(转)
查看>>
结对编程项目-四则运算整体总结
查看>>
Android studio怎么修改文件名
查看>>
sass学习笔记-安装
查看>>
多缓存并存
查看>>
Flask (二) cookie 与 session 模型
查看>>
修改添加网址的教程文件名
查看>>
hdu 1045:Fire Net(DFS经典题)
查看>>
[BZOJ 1017][JSOI2008]魔兽地图DotR(树形Dp)
查看>>
裁剪图片
查看>>
数据结构实习 problem L 由二叉树的中序层序重建二叉树
查看>>