现在属于是老年人的脑子,东西写着写着就忘了,东西记着记着就不知道了。之前学C++的时候就把类、对象这块弄得乱七八糟,现在是因为很想玩python,所以就看看python的类和对象。

就像说的,类有三个特征:封装、继承、多态。

1、封装:类封装了一些方法,可通过一定的规则约定方法进行访问权限。

C++中的成员变量有public、private、ptotected。

在python中,默认的成员变量都是public的,如果成员变量前面是加两个下划线,表示该成员变量是私有的。并且private类不能被继承类引用,并且不允许直接访问。

2、继承:在定义一个类的时候可以从当前有的类中进行继承。

python是允许多继承的,并且在子类中拥有父类所有的成员变量和方法,为了缓解代码中的冗余,子类在父类的基础上增加的成员变量可以如下修改。

class Person(object):

def __init__(self,name,sex):

self.name = name

self.sex = sex

class Child(Person): # Child 继承 Person

def __init__(self,name,sex,mother,father):

Person.__init__(self,name,sex) # 子类对父类的构造方法的调用

self.mother = mother

self.father = father

May = Child("May","female","April","June")

print(May.name,May.sex,May.mother,May.father)

3、多态:当子类继承父类之后,成员方法既可以重写也可以不重写。当调用的时候只要保证新方法编写正确,不用管原来的代码。

对扩展开放(Open for extension):允许子类重写方法函数

对修改封闭(Closed for modification):不重写,直接继承父类方法函数

python是一种动态语言,动态语言是在运行的时候确定数据类型的语言。变量在使用前不用声明,通常变量的类型是被复制的那个值的类型。

静态语言是在编译的时候变量的数据类型即可确定的语言,多数静态类型语言要求在使用变量之前鼻血声明数据类型。

在类中,当要对成员变量进行约束的时候可以使用@property,python内置的@property装饰器是负责把一个方法变成属性调用

在实例属性操作的时候,就知道该属性很可能不是直接暴露的,而是通过getter和setter方法来实现的。还可以定义只读属性,只定义getter方法不定义setter就是一个只读属性

请利用@property给一个Screen对象加上width和height属性,以及一个只读属性resolution:

class Screen(object) :

@property

def width(self) :

return self._width

@width.setter

def width(self,valuer) :

if not isinstance(valuer,int):

raise ValueError('score must be an integer')

if valuer < 0 :

raise ValueError('score must over zero')

self._width=valuer

@property

def height(self) :

return self._height

@height.setter

def height(self,number) :

if not isinstance(number,int) :

raise ValueError('score must be an integer')

if number < 0 :

raise ValueError('score must be an zero')

self._height = number

@property

def resolution(self):

return self._width * self._height

s=Screen()

s.width = 1024

s.height = 768

print(s.resolution)

python类的继承与多态_python类的继承和多态相关推荐

  1. python中组合与继承的区别_python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...

  2. python类的继承super方法_Python类的继承super相关原理解析

    看了网上许多关于super.mro.C3的介绍感觉没有一份很容易初学者理解的文档,直接看C3算法的话,比较难理解,也没必要,如果掌握一套规律的话,会轻松许多.我将网上这些博主的文章进行一个梳理总结,最 ...

  3. python中构造方法可以被继承吗_python – 类继承:构造函数应该兼容吗?多重继承的情况?...

    是否建议它也适用于构造函数?我主要考虑Python及其__init __()方法,但这个问题适用于任何具有继承的面向对象语言. 我问这个问题,因为有一个子类从一个或多个类继承,提供一些不错的默认行为( ...

  4. python 类继承 父类初始化_python之子类继承父类时进行初始化的一些问题

    直接看代码: classPerson:def __init__(self): self.name= "jack" classStudent(Person):def __init__ ...

  5. python 类继承和组合_python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承 ...

  6. python类属性和实例属性_Python 类属性与实例属性,类对象与实例对象用法分析...

    本文实例讲述了Python 类属性与实例属性,类对象与实例对象用法.分享给大家供大家参考,具体如下: demo.py(类属性,所有实例对象共用类属性): # 定义工具类 继承object是为了兼容py ...

  7. python类与对象做项目_python 类和对象

    一.编程范式 1.面向对象编程: 2.面向过程编程: 3.函数式编程 二.面向对象设计 面向对象设计:将一类具体事物的数据和动作整个到一起; 1.我们都学过函数,那么使用函数该怎么实现面向对象设计呢? ...

  8. python用于标识类方法的是_Python类的设计与使用

    28 类的基础--设计.使用 上一章说过,类是事物功能和属性的抽象,对象是类的实例化.就像人人都知道小汽车可以干什么什么的,但光想小汽车如何好是没有用的,得开车或坐才能感受到小汽车的好.人脑里的小汽车 ...

  9. python中的类及self详解_Python类class参数self原理解析

    1.self只有在类的方法中才会有,其他函数或方法是不必带self的. 2.在调用时不必传入相应的参数. 3.在类的方法中(如__init__),第一参数永远是self,表示创建的类实例本身,而不是类 ...

最新文章

  1. php接口过滤器,雷林鹏分享:PHP 过滤器
  2. centOS+uwsgi+nginx 部署flask项目,问题记录
  3. SEED实验系列:Collabtive系统SQL注入实验
  4. vagrant 常用命令
  5. 使用 Solid 私有化存储 IPFS 文件哈希值
  6. php 表单验证代码,php 表单验证实现代码
  7. 字蛛(font-spider)教学——ttf/otf字体文件压缩
  8. 在开发中如何正确的应对系统故障
  9. 微信自研生产级 Paxos 类库 PhxPaxos 实现原理介绍
  10. Keras实现小数量集图片分类——6类别Birds数据集分类
  11. yum clean all 是什么意思
  12. jdk下载,安装与卸载,删除注册表
  13. 海外游戏广告投放渠道
  14. python实现简单的多人聊天功能
  15. 顺序队列,链队列的基本操作
  16. Flask框架二 Jinja2
  17. Educational Codeforces Round 119 (Rated for Div. 2) 做题日志
  18. Swift 基础 枚举详解(代码)
  19. 穿过时光隧道去看TNF100十周年,这次天猫Club如何跑出新生活方式?
  20. 科学怪人,半死僵尸和其他怪物

热门文章

  1. wxWidgets:wxMemoryOutputStream类用法
  2. wxWidgets:编写应用程序的快速指南
  3. boost::iostreams::gzip用法的测试程序
  4. boost::iterator::permutation_iterator用法的测试程序
  5. boost::lambda::bind用法的测试程序
  6. boost::gil模块实现带默认参数的框过滤器的测试程序
  7. boost::fusion::result_of::as_map用法的测试程序
  8. boost::exchange的测试程序
  9. boost::allocator_destroy的实例
  10. VTK:Rendering之Cone3