IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python学习9 面向对象 类和对象 -> 正文阅读

[Python知识库]Python学习9 面向对象 类和对象

作者:token comment

面向对象和面向过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类和对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类的设计

在这里插入图片描述
在这里插入图片描述

类的创建

在这里插入图片描述
self:相当于当前对象;类似于Java中的this
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类的创建和使用:

#类的命名:每个单词首字母大写
class Dog:
    #属性
    name = 'dog'
    age = 11
    #方法
    def eat(self):
        print('eat rice!')


dog = Dog()
print(dog.name,dog.age,sep='\n')
dog.eat()



class Dog1(object):
    name = 'dog'
    age = 11
#构造方法
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def mood(self):
        print('good')


dog1 = Dog1('dog1', 8)
print(dog1.name,dog1.age,sep='\n')
dog1.mood()

基本语法:self

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

基本语法:slots

在这里插入图片描述
案例:

#3
class Choose(object):
    #规定对象的属性,不能随意增加属性
    __slots__ = ('name','age','position')
    def __init__(self,name,age,postion):
       self.name=name
       self.age=age
       self.position=postion
    def fun(self):
        print('just fun,don\'t think!')
    def printName(self):
        print('name={}'.format(self.name))
c=Choose('c',90,'position')
c.fun()
c.printName()


class Choose(object):
    def __init__(self,name,age,postion):
       self.name=name
       self.age=age
       self.position=postion
c=Choose('c',90,'position')
c.city='add'#不存在,就添加属性;存在,就修改属性值
print(c.city)

魔术方法

在这里插入图片描述

魔术方法:__init__方法 & __del__方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

魔术方法:__str__方法

在这里插入图片描述
在这里插入图片描述

魔术方法: __call__方法

在这里插入图片描述

魔术方法: __eq__方法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

魔术方法案例


# 4 魔术方法:自动执行
class Magic(object):
    __slots__ = ('name', 'age')

    # 创建时调用
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('init class!:' + self.name)

    # 在销毁对象时调用
    def __del__(self):
        print('delete class!:' + self.name)
        # 在默认输出对象时调用,默认打印当前对象地址;重写后打印信息
    def __str__(self):
        return 'this is str:' + self.name

    # 在m1()时调用
    def __call__(self, *args, **kwargs):
        print('call class:' + self.name)
        # 在==比较对象时调用

    def __eq__(self, other):
        return self.name == other.name and self.age == other.age


m1 = Magic('m1', 1)
m2 = Magic('m2', 2)
# 调用str
print(m1)
print(m2)
# 调用call
m1()
m2()
# 比较两个对象的内存地址
print(m1 is m2)
# 调用eq进行比较
print(m1 == m2)

#输出
#init class!:m1
# init class!:m2
# this is str:m1
# this is str:m2
# call class:m1
# call class:m2
# False
# False
# delete class!:m1
# delete class!:m2

其他魔术方法总结

在这里插入图片描述
在这里插入图片描述

练习1-摆放家具

在这里插入图片描述
在这里插入图片描述
代码

#author:dq
#project:PythonProject
#date:2021年10月18日
#function:class
# 编程题:【摆放家具】需求:
# 1 房子(House)有户型、总面积、剩余面积(=总面积-家具面积) 和 家具名称列表 属性。
#     注:新房子没有任何家具
# 2  家具(HouseItem)有 名字 和 占地面积 属性,其中
#                         席梦思(bed)占地 4 平米
#                         衣柜(chest)占地 2 平米
#                         餐桌(table)占地 1.5 平米
# 3  将以上三件家具添加到房子中;
# 4  判断 家具的面积 是否 超过剩余面积,如果超过,提示不能添加这件家具;
# 5 打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

class House(object):
    __slots__ = ('style', 'allSzie', 'restSize', 'furnituresList')

    def __init__(self, style, allSzie, restSize, furnitureList):
        self.style = style
        self.allSzie = allSzie
        self.restSize = restSize
        self.furnituresList = furnitureList

    def __str__(self):
        #print('style=' + self.style + '\t' + 'allSzie=' + str(self.allSzie) + '\t' + 'restSize=' + str(self.restSize)+'\t'+str(self.furnituresList) + '\n')
        #return 'style=' + self.style + '\t' + 'allSzie=' + str(self.allSzie) + '\t' + 'restSize=' + str(self.restSize)+'\t'+str(self.furnituresList) + '\n'
        return 'style=' + self.style + '\t' + 'allSzie=' + str(self.allSzie) + '\t' + 'restSize=' + str(self.restSize)+'\t'+' '.join(self.furnituresList) + '\n'

    def add_furniture(self, item):
        if(item.area<=self.restSize):
          self.restSize-=item.area
          self.furnituresList.append(item.name)
          print('可以添加'+item.name+'家具!\n')
        else:
           print('不可以添加'+item.name+'家具!\n')


class HouseItem(object):
    __slots__ = ('name', 'area')

    def __init__(self, name, area):
        self.name = name
        self.area = area
    def __str__(self):
        return 'name='+self.name+'\t'+'area='+str(self.area)+'\n'

bed=HouseItem('席梦思',4)
chest=HouseItem('衣柜',2)
table=HouseItem('餐桌',1.5)
print(bed)
print(chest)
print(table)
h=House('别墅',10,10,[])
h.add_furniture(bed)
h.add_furniture(chest)
h.add_furniture(table)
print(h)

练习2-计算点是否在矩形内

在这里插入图片描述

#author:dq
#project:PythonProject
#date:2021年10月18日
#function:
# 需求:设计两个类:
# 一个点Point类,属性包括 x 和 y 坐标。
# 一个矩形Rectangle类,属性有左上角(top_left)和 右下角(bottom_right)的坐标。
#     方法:1.计算矩形的面积(get_area);2.判断点是否在矩形内(is_inside)。
# 主程序:
# 实例化一个点对象,一个正方形对象,输出矩形的面积,输出点是否在矩形内

class Point(object):
    __slots__ = ('x','y')
    def __init__(self,x,y):
        self.x=x
        self.y=y
    def __str__(self):
        return 'x='+self.x+'\t'+'y='+self.y+'\n'
class  Rectangle(object):
    __slots__ = ('x1', 'y1','x2','y2')
    def __init__(self, x1, y1,x2,y2):
        self.x1 = x1
        self.y1 = y1
        self.x2 = x2
        self.y2 = y2
    def __str__(self):
        return 'area='+ str(self.area())
    def area(self):
        return (self.x2-self.x1)*(self.y2-self.y1)
    def inside(self,point):
        if((self.x1<point.x<self.x2) and(self.y1<point.y<self.y2)):
            return True
        else:
            return False
point=Point(1,4)
r=Rectangle(0,0,2,7)
print(r)
print(r.inside(point))

练习3-计算器类

设计一个计算器类,可以进行加、减、乘、除计算。

# author:dq
# project:PythonProject
# date:2021年10月18日
# function:设计一个计算器类,可以进行加、减、乘、除计算。

class Count(object):
    __slots__ = ('x', 'pos', 'y')

    def __init__(self, x, pos, y):
        self.x = x
        self.pos = pos
        self.y = y

    def decide(self):
        if (self.pos == '+'):
            return self.add()
        elif (self.pos == '-'):
            return self.sub()
        elif (self.pos == '*'):
            return self.mul()
        elif (self.pos == '/'):
            return self.truediv()

    def add(self):
        return self.x + self.y

    def sub(self):
        return self.x - self.y

    def mul(self):
        return self.x * self.y

    def truediv(self):
        return self.x / self.y

    def __str__(self):
        return str(self.x) + self.pos + str(self.y) + "=" + str(self.decide())



x=int(input('请输入x:'))
pos=input('请输入pos:')
y=int(input('请输入y:'))
c = Count(x, pos, y)
print(c)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 11:50:09  更:2021-10-19 11:50:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:25:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码