@面向对象

开启博客之路,开始做笔记ing

一,类的创建

1,类的定义

class People:

country = 'China' #类变量

def __init__(self,name,sex,age,height ):#构造函数

self.name = name#实例变量(从C++角度,类似于数据成员)

self.sex = sex

self.age = age

self.__height = height #私有属性

def printInfo(self):#方法(从C++角度,类似于成员函数)

print("%s is a %s,from %s"%(self.name,self.sex,self.country))

def __myPrivacy(self):#私有方法

print("This is my privacy!")

2,self

参数self,指向对象本身,代表类的实例,必不可少,可以随便给这个参数命名,一般习惯上为self.

3,类变量

类变量为所有实例所共享,直接访问可用 类名.类变量。

实例变量,为此实例独享。

类变量的访问

访问类变量时首先访问实例变量,若实例变量不存在时则访问类变量,若实例变量存在,则以下方法一和方法二访问到的变量均为实例变量。

方法一:类变量在类内的访问方式为 self.country;

方法二:在类外访问方式为p1.country;

方法三:直接访问方式为People.country.

#若country的实例变量不存在

p1 = People("Zhangsan","girl",22,160)

p1.printInfo()

print("from:",p1.country)

print("country:",People.country)

Zhangsan is a girl,from China

from: China

country: China

#若实例变量存在

class People:

country = 'China' #类变量

def __init__(self,name,sex,age):#构造函数

self.name = name #实例变量

self.sex = sex

self.age = age

self.country = 'Ch'

def printInfo(self): #方法

print('%s is a %s,from %s'%(self.name,self.sex,self.country))

p1 = People("Zhangsan","girl",22)

p1.printInfo()

print("from:",p1.country)

print("country:",People.country)

Zhangsan is a girl,from Ch

from: Ch

country: China

类变量的修改

修改类变量时,可用People.country直接赋值,实例修改类变量时,p1.country = ‘A’,表示在本实例空间内添加实例变量,不会修改类变量的值。若实例要修改类变量可用p1.__class__.country = ‘A’。

二,类的继承

class A0:

def __init__(self):

print("init A0")

def printName(self):

print("class name:A0")

class A1:

def __init__(self):

print("init A1")

def printName(self):

print("class name:A1")

class B(A0): #单继承

def __init__(self):

super().__init__()

print("init B")

#def printName(self):

#print("class name:B")

class C(A0,A1): #多重继承

def __init__(self):

A0.__init__(self)

A1.__init__(self)

print("init C")

def printName(self):

print("class name:C")

多重继承

1,构造函数__init__()

构造函数用于实例初始化,在继承中,子类的构造函数必须调用其父类的构造函数,以确保基本的初始化。有两种方法:

1.单继承中可以如下调用,以下以class B中的构造函数为例。

super().__init__() (旧类中 super(B,self).__init__())

A0.__init__(self) (调用未关联的超类构造函数)

2.多继承中如下调用,以class C为例。

super(C,self).__init__()

super(A0,self).__init__()

A0.__init__(self)

A1.__init__(self)

如有需要初始化父类的参数,均在调用的父类的init中。

执行

c = C()

结果

init A0

init A1

init C

2,方法调用

如果多个父类以不同的方式实现了同一个方法,并且子类未实现此方法且未指定父类的方法,则从左到右查找父类中是否包含方法,位于前面的类的方法则覆盖位于后面的类的方法。

#运行

c = C()

c.printName()

b = B()

b.printName()

#结果

init A0

init A1

init C

class name:C

init A0

init B

class name:A0

3,一些其他的方法

1,要确定一个类是否为另一个类的子类,可使用内置方法issubclass.

issubclass(childrenClass,basesClass),返回True或者False。

2,访问一个类的基类,可访问其特殊属性__bases__。

childrenClass.__bases__

3,要确定对象是否为特定类的实例,可使用isinstance。

p = People()

isinstance(p,People)

返回True或者False

查看数据类型也可以用isinstance(a,int)。

4,获取对象属于哪个类,可用属性__class__.

p.__class__。

python3的面向对象_python3学习之面向对象相关推荐

  1. python学习面向对象_python学习之面向对象学习

    一.什么事面向对象,以及面向对象的优点? 面向过程优缺点: 我们知道面向过程是流水线式的编程,过程就是解决问题的步骤,把大的问题化解成小的模块 面向过程优点: 极大的降低了程序的复杂度 面向过程缺点: ...

  2. python3语法手册_Python3 学习手册每日更新

    1.数学计算: n的m次方:n**m n除以m的整数值:n // m n除以m的浮点值:n / m Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b ...

  3. python3面向对象_Python3面向对象编程

    Python3面向对象编程 编辑 锁定 讨论 上传视频 <Python3面向对象编程>是2015年6月电子工业出版社出版的图书,作者是肖鹏,常贺,石琳. 书    名 Python3面向对 ...

  4. python3 面向对象_Python3 面向对象

    Python和C++都是一门面向对象的语言, 面向对象技术简介 类(Class):用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例.比如 f = f ...

  5. Python学习之面向对象编程

    Python学习目录 在Mac下使用Python3 Python学习之数据类型 Python学习之函数 Python学习之高级特性 Python学习之函数式编程 Python学习之模块 Python学 ...

  6. Python学习之面向对象高级编程

    Python学习目录 1. 在Mac下使用Python3 2. Python学习之数据类型 3. Python学习之函数 4. Python学习之高级特性 5. Python学习之函数式编程 6. P ...

  7. Builder (建造者) — 【面向对象设计模式学习】

    Builder (建造者) - [面向对象设计模式学习] By CityWalker 2010年3月19日 Intent Separate the construction of a complex ...

  8. 面向对象编程学习5月7日-5月23日 网络直播yii-外企使用最多的PHP框架

    每日一贴,今天的内容关键字为面向对象编程学习 课程说明: ----------------------------------------------------------------------- ...

  9. python面向对象编程项目_Python学习之==面向对象编程(一)

    一.面向对象与面向过程 面向对象与面向过程是两种不同的编程范式,范式指的是按照什么方式去编程.去实现一个功能.不同的编程范式本质上代表对各种不同类型的任务采取不同的解决问题的思路. 1.面向过程编程 ...

最新文章

  1. 8 个 Python 高效数据分析的技巧
  2. CNCC技术论坛丨联邦学习冲刺人工智能“最后一公里”!
  3. 电子工程可以报考二建_非工程类专业可以报考二建吗?哪些省份不限制报考专业?...
  4. 异常与锁的释放(synchronized )
  5. vSphere vSAN 入门
  6. springmvc请求参数绑定
  7. 高清3D人体解剖图谱
  8. 专业心理性格测试软件,what is my color心理性格测试
  9. OpenSSL 常用函数——证书操作
  10. 摄像头直播视频接口视频播放器
  11. VMware临时文件清理
  12. 混沌之初--制作一款RPG游戏
  13. “别人家”的毕设:造了个车!拆装驾驶一步到位,宅家5个月,设计建模组装自行完成
  14. Crossplane - 比 Terraform 更先进的云基础架构管理平台?
  15. Windows8.1设置默认输入法为英文
  16. 杰理之BQB 的 RF 测试【篇】
  17. THREAD APC 《寒江独钓》内核学习笔记(4)
  18. 【错误记录】Git 使用报错 ( error: Cannot delete branch ‘dev‘ checked out at ‘D:/Git/git-learning-course‘)
  19. 帕斯卡公式+Lucas定理______DP?( hdu 3944 )
  20. 书到用是方恨少......

热门文章

  1. php和xml区别,php和XML
  2. Java for循环改数据_如何改变arrs数组?当然是需用for循环啦
  3. android权限机制6.0,Android6.0权限机制(二):封装
  4. 硬盘清零工具_WinHex使用方法与使用WinHex恢复硬盘实例
  5. 1_数据分析—数据载入、导出和探索
  6. react 引入轮播插件_React.js实现轮播图
  7. 基于php校园失物招领,校园失物招领系统的设计.doc
  8. Oracle/PLSQL Repeat Until Loop
  9. 采用FTP协议实现文件的上传
  10. win7下hosts文件位置