一面向对象

类和对象都是面向对象重要的概念。面向对象是一种变成思想,即按照真实世界思维方式构建软件系统。

二定义类

python中的数据类型都是类,我们可以自定义类,即创建一种新的数据类型。
class Car(object):
#类体
pass

三创建对象

类相当于一个模板,依据这样的模板创建对象,就是类的实例化。
class Car(object):
#类体
pass
car = Car()

四类的成员

类的成员:
1.成员变量,保存了类或对象的数据
2.构造方法:用于初始化成员变量
3.成员方法:在类中定义函数
4.属性:对类进行封装提供的特殊的方法

4.1实例变量

init()是构造方法,构造方法用来初始化实例变量。

class Dog:
def init(self,name,age):
self.name = name
self.age = age

d = Dog(‘球球’,2)

4.2构造方法

init()是构造方法,第一个参数应该是self,之后的参数用来初始化实例变量。
class Dog:
def init(self,name,age,sex=“雌性”):
self.name = name
self.age = age
self.sex = sex

d1 = Dog(‘球球’,2)
d2 = Dog(‘大黄’,2,“雄性”)
d3 = Dog(name=‘小黑’,sex=“雄性”,age=2)
print(“{0}:{1}岁{2}”.format(d1.name,d1.age,d1.sex))
print(“{0}:{1}岁{2}”.format(d2.name,d2.age,d2.sex))
print(“{0}:{1}岁{2}”.format(d3.name,d3.age,d3.sex))

4.3实例方法

实例方法与实例变量一样,都是实例某个个体特有的方法。

4.4类变量

类变量是共享的变量,它属于类,不属于单个对象。

4.5类方法

类方法与类变量类似,属于类,不属于单个个体。
注意:定义类方法需要装饰器,装饰器以@开头 修饰函数 、方法和类,用来约束它们。
class Account:
interest_rate = 0.012 # 类利率
def init(self,owner,amount):
self.owner = owner
self.amount = amount

#类方法
@classmethod
def interest_by(cls,amt):return cls.interest_rate*amt

interest = Account.interest_by(12000.0)

print(“计算利息:{0}”.format(interest))

五封装性

封装性是面向对象重要的基本特征之一,封装性隐藏了对象的内部细节,只保留有限的对外接口,外部调用者不用关心对象的内部细节,使得操作对象变的简单。

5.1私有变量

为了防止外部调用者随意存取类的内部数据,内部数据会被封装成“私有变量”。
在默认情况下,python的变量默认为共有的。如果想让他们成为私有的变量,在前面加上双__

后两句错误会发生,在类的内部可以访问私有变量,在外部不可以。

5.2私有方法

私有方法与私有变量类似,在方法前加上__就是私有方法啦。

5.3使用属性

为了实现对象的封装,在一个类中不应该有共有的成员变量。这些成员变量应该被设计为私有的,然后通过公有的set赋值 和get取值:
class Dog:
#构造方法
def init(self,name,age,sex=“雌性”):
self.name = name
self.__age = age
self.sex = sex
#实例方法
def run(self):
print(“{0}再跑******”.format(self.name))
#get方法
def get_age(self):
return self.__age
#set方法
def set_age(self,age):
self.__age = age
dog = Dog(‘球球’,2)
print(“狗狗年龄:{}”.format(dog.get_age()))
dog.set_age(3)
print(“修改后狗狗的年龄:{}”.format(dog.get_age()))

在上面的事例中,当外部调用者通过两个公有方法 访问被封装的私有成员变量时,会比较麻烦,有没有更好的办法?
我们可以在类中定义属性,属性可以代替get()和set()这两个方法。

定义age属性的get方法@property 装饰器进行修饰,方法名就是属性名

可以通过属性取值,访问形式为实例.属性

六继承性

6.1继承

继承性也是面向对象重要的特征之一。
在面向对象中,动物是一般的类。猫是特殊的类,被称为"子类"。特殊的类拥有一般类的全部的数据和操作,可以称为子类继承父类。
class Animal:
def init(self,name):
self.name = name

def show_info(self):return("动物的名字:{0}".format(self.name))def move(self):print("动一动****")

class Cat(Animal):

def __init__(self,name,age):super().__init__(name)#调用父类的构造方法,初始化父类的成员变量self.age = age #实例变量

cat = Cat(“Tom”,2)
cat.move()
print(cat.show_info())

在子类构造方法中会调用父类构造方法,这个过程有些复杂,能解释一下吗?
构造方法的作用是初始化类的实例成员变量,在初始化子类时,也初始化父类的实例成员变量。
在创建cat时调用Cat类构造方法,调用父类的构造方法,初始化父类的实例成员变量,初始化子类的实例成员变量。

6.2多继承

在python中,当子类继承多个父类时,如果在多个父类中有相同的成员方法或变量,则子类优先继承左边父类的成员方法或变量:
class Horse:
def init(self,name):
self.name = name #实例变量 name

def show_info(self):return "马的名字:{0}".format(self.name)def run(self):print("马跑")

class Donkey:
def init(self,name):
self.name = name
def show_info(self):
return “驴的名字:{0}”.format(self.name)

def run(self):print("驴跑***")def roll(self):print("驴打滚***")

class Mule(Horse,Donkey):
def init(self, name,age):
super().init(name)
self.age =age

m = Mule(“骡子A”,1)
m.run() #继承父类Horse 的方法
m.roll() #继承父类Donkey的方法
print(m.show_info())#继承父类Horse 的方法

6.3方法重写

如果子类的方法名与父类的方法名重名,则在这种情况下,子类的方法会重写父类的同名方法。
class Horse:
def init(self,name):
self.name = name #实例变量 name

def show_info(self):return "马的名字:{0}".format(self.name)def run(self):print("马跑")

class Donkey:
def init(self,name):
self.name = name
def show_info(self):
return “驴的名字:{0}”.format(self.name)

def run(self):print("驴跑***")def roll(self):print("驴打滚***")

class Mule(Horse,Donkey):
def init(self, name,age):
super().init(name)
self.age =age

def show_info(self):return "驴的名字:{0},{1}岁".format(self.name,self.age)

m = Mule(“骡子A”,1)
m.run() #继承父类Horse 的方法
m.roll() #继承父类Donkey的方法
print(m.show_info())#调用子类mule自己的方法

Python之类对象相关推荐

  1. 完全理解 Python 迭代对象、迭代器、生成器(转)

    完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...

  2. python类对象和实例对象

    类对象支持两种操作:属性引用和实例化. 属性引用 使用 Python 中所有属性引用所使用的标准语法: obj.name. 有效的属性名称是类对象被创建时存在于类命名空间中的所有名称. 因此,如果类定 ...

  3. python哪些是可变对象_什么是Python可变对象和不可变对象

    什么是Python可变对象和不可变对象 发布时间:2020-07-22 09:59:15 来源:亿速云 阅读:60 作者:Leah 这篇文章运用简单易懂的例子给大家介绍什么是Python可变对象和不可 ...

  4. python mmap对象

    ----使用内存映射的原因 为了随机访问文件的内容,使用mmap将文件映射到内存中是一个高效和优雅的方法.例如,无需打开一个文件并执行大量的seek(),read(),write()调用,只需要简单的 ...

  5. python和对象复习_面向对象阶段复习

    面向对象阶段复习 一.类,对象,属性方法调用 class 类名(父类1,父类2): 静态属性 = '' # 静态属性,也叫类属性 def __init__(self): # 初始化方法 self.na ...

  6. 弱引用的用途:在底层C++对象被上层python脚本对象使用时(转)

    在使用python脚本和底层C++对象进行交互的过程中发生了一个问题:由于底层C++对象的创建和删除决定权由底层决定,当底层决定删除这些对象而上层仍然在"强引用"这些对象的时候,就 ...

  7. python 视图对象_python web框架篇:views视图函数

    Django请求的生命周期是怎样的? 简单地说,通过URL对应关系匹配 ->找到对应的函数(或者类)->返回字符串(或者读取Html之后返回渲染的字符串) 解剖起来如下: 1. 当用户在浏 ...

  8. python遇到对象_### python面对对象小汇总 #####

    python面对对象小汇总 类的起名规则 # 所有的类名要求首字母大写,多个单词使用驼峰式命名法 如 ValueError # 类中方法: 普通方法 类方法 静态方法 魔术方法 class Phone ...

  9. 还不会python面相对象?活该单身(面向对象基础+交互关系)

    文章目录 概述 名词解释 类的定义 类的实例化 类属性 两个对象的交互 依赖关系 关联关系 组合关系 类变量的用途 概述 活在当下的程序员应该都听过"面向对象编程"一词,之前太懒了 ...

  10. python将对象放入列表根据某个属性排升序_python实现对象列表根据某个属性排序的方法详解...

    本文实例讲述了python实现对象列表根据某个属性排序的方法.分享给大家供大家参考,具体如下: 对于一个已有的python list, 里面的内容是一些对象,这些对象有一些相同的属性值, 在一些特定的 ...

最新文章

  1. 复旦 计算机 学硕 延毕,研究生招考呈现新趋势:非全日制招生遇冷 延期毕业现象越发明显...
  2. 数数正方形(ACM/ICPC World Finals)
  3. 柱状图、堆叠柱状图、瀑布图有什么区别?怎样用Python绘制?(附代码)
  4. linux下zip2
  5. fabric 简单理解
  6. Linux 进程详解
  7. 【今日CS 视觉论文速览】Thu, 6 Dec 2018
  8. 【资源共享】Rockchip I2C 开发指南 V1.0
  9. 有谁了解 最基础的计算机的网络结构呢?
  10. paip.sql2008 客户端软件绿色版V319
  11. IE兼容性问题解决方案
  12. Python实现借助聚合数据API接口生成某一年的节假日对照表
  13. 大数据架构之-- Lambda架构
  14. python第一周心得
  15. 《一课经济学》六、政府价格管制
  16. 游戏是怎么赚钱的 - 进阶篇
  17. html css使用特殊自定义字体避免侵权
  18. 飞机大战的常见Bug
  19. Codeforces Round #439 (Div. 2) E. The Untended Antiquity (hash+数状数组)
  20. 【红日靶场系列】ATTCK红队评估3

热门文章

  1. 专利是个人申请好还是公司申请好呢?
  2. 中国游戏事业发展数据产品报告(内含python数据可视化源码)
  3. 打开深度学习的潘多拉魔盒(模型可视化)
  4. 数学建模计算机软件,[计算机软件及应用]数学建模培训.ppt
  5. 驱动精灵官方版v8.0.1230
  6. 【转载】CRC16大全
  7. 常见的几种web容器(Apache、Nginx、Tomcat)
  8. Promethus(普罗米修斯)
  9. 骆驼QA:基于陈丹琦CoQA数据集的中文阅读理解模型,可给定知识文本进行问答...
  10. 什么是尾调用优化和尾递归?