最简单的类

#类是一个模板
class Dog:pass    #空的d1=Dog()#创建第一个实例
d2=Dog()#创建第二个实例
d1.name='大黄'#动态赋值print(d1.name)
print(d2.name)

在__int__中给类加上属性

class Dog:#构造方法def __init__(self,name,height,blood,power):self.name = nameself.height = heightself.blood = bloodself.power = power
d1 = Dog('大黄',0.7,10,3)#创建第一个实例
d2 = Dog('二黑',0.5,10,4)#创建第二个实例print(d1.name)
print(d2.name)

__init__方法

用到Python当中的一个内置方法__init__方法

  1. __init__方法的第一参数永远是self,表示创建的类实例本身
  2. 有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去。
    3)这里self就是指类本身,self.name就是Student类的属性变量,是Student类所有。而name是外部传来的参数,不是Student类所自带的。故,self.name = name的意思就是把外部传来的参数name的值赋值给Student类自己的属性变量self.name。

添加和使用方法

class Dog:#构造方法def __init__(self,name,height,blood,power):self.name = nameself.height = heightself.blood = bloodself.power = powerdef bark(self):#叫print(f'我是{self.name},身高{self.height},血量{self.blood},攻击力{self.power}')def attack(self,dog2):#攻击dog2.blood = dog2.blood-self.powerd1 = Dog('大黄',0.7,10,3)#创建第一个实例
d2 = Dog('二黑',0.5,10,4)#创建第二个实例d1.bark()
d2.bark()
d1.attack(d2)
d2.bark()

我是大黄,身高0.7,血量10,攻击力3
我是二黑,身高0.5,血量10,攻击力4
我是二黑,身高0.5,血量7,攻击力4

通过方法改变属性的值

扣血后血量不为零实例:

class Dog:#构造方法def __init__(self,name,height,blood,power):self.name = nameself.height = heightself.blood = bloodself.power = powerdef bark(self):#叫print(f'我是{self.name},身高{self.height},血量{self.blood},攻击力{self.power}')def attack(self,dog2):#共计dog2.blood = dog2.blood-self.power#dog2.reduce_blood(self.power)def reduce_blood(self,reduce_value):if(reduce_value > self.blood):self.blood = 0else:self.blood -=reduce_valued1 = Dog('大黄',0.7,10,3)#创建第一个实例
d2 = Dog('二黑',0.5,10,4)#创建第二个实例d1.reduce_blood(4)
d1.reduce_blood(4)
d1.reduce_blood(4)
d1.bark()

我是大黄,身高0.7,血量0,攻击力3

类属性

class Dog:#类属性num_of_dogs = 0#构造方法-添加实例属性,做其他初始化工作def __init__(self,name,height,blood,power):self.name = nameself.height = heightself.blood = bloodself.power = powerprint(f"{self.name}出生了,汪汪!")def bark(self):#叫print(f'我是{self.name},身高{self.height},血量{self.blood},攻击力{self.power}')def attack(self,dog2):#共计dog2.reduce_blood(self.power)def reduce_blood(self,reduce_value):if(reduce_value > self.blood):self.blood = 0else:self.blood -=reduce_valued1 = Dog('大黄',0.7,10,3)#创建第一个实例
d2 = Dog('二黑',0.5,10,4)#创建第二个实例print(Dog.num_of_dogs)#通过类名访问
print(d1.num_of_dogs)#通过实例访问

大黄出生了,汪汪!
二黑出生了,汪汪!
0
0

分割

d1.num_of_dogs = 10
#给d1创建了一个实例属性,当实例属性和类属性相同时,
#通过实例访问,优先访问的是实例属性
Dog.num_of_dogs = 8
print(Dog.num_of_dogs)#通过类名访问
print(d1.num_of_dogs)#通过实例访问
print(d2.num_of_dogs)#通过实例访问

大黄出生了,汪汪!
二黑出生了,汪汪!
8
10
8

类属性:
1.整个类只有一份,所有的实例共享这一份
2.可以通过类名或者实例名访问类属性,访问的都是同一个
3.修改类属性需要通过类名,
4.因为通过实例名就会创建一个同名的实例变量
5.实例变量和类变量同名时,使用实例访问优先使用的是实例变量

类方法

class Dog:#类属性#num_of_dogs = 0dogs = []#用来保存所有狗的列表#类方法,需要加一个英文标注#classmethoddef num_of_dogs(cls):return len(cls.dogs)#构造方法-添加实例属性,做其他初始化工作def __init__(self,name,height,power):self.name = nameself.height = heightself.blood = 10self.power = power#Dog.num_of_dogs +=1Dog.dogs.append(self)print(f"{self.name}出生了,汪汪!")def bark(self):#叫print(f'我是{self.name},身高{self.height},血量{self.blood},攻击力{self.power}')def attack(self,dog2):#共计dog2.reduce_blood(self.power)def reduce_blood(self,reduce_value):if(reduce_value > self.blood):self.blood = 0else:self.blood -=reduce_valued1 = Dog('大黄',0.7,3)#创建第一个实例
d2 = Dog('二黑',0.5,4)#创建第二个实例print(Dog.num_of_dogs())#通过类名访问
print(d1.num_of_dogs())#通过实例访问
print(d2.num_of_dogs())#通过实例访问

大黄出生了,汪汪!
二黑出生了,汪汪!
2
2
2

类方法:
1.可以通过类名调用,也可以通过实例名调用
2.类方法不能访问实例变量,可以访问变量
3.类方法需要加上@classmethod,第一参数必须是class(cls)

练习:
1.添加一个类方法number_of_big_dog表示高度大于0.5的狗数量:

@classmethod
def num_of_big_dogs(cls):#高度大于0.5的狗 数量big_dog = 0`在这里插入代码片`for d in cls.dogs:if(d.height > 0.5):big_dog+=1return big_dog

2.添加一个类方法,返回最矮狗的高度:

@classmethod
def smallest(cls):min_height = 10for d in cls.dogs:if(d.height  < min_height):min_height = d.heightreturn min_height

输出模块:

d1 = Dog('大黄',0.7,3)#创建第一个实例
d2 = Dog('二黑',0.5,4)#创建第二个实例
d3 = Dog('三灰',0.8,5)print(Dog.num_of_dogs())#通过类名访问
print(d1.num_of_dogs())#通过实例访问print(Dog.num_of_big_dogs())print(d2.biggest())
print(d1.smallest())

结果:

大黄出生了,汪汪!
二黑出生了,汪汪!
三灰出生了,汪汪!
3
3
2
0.8
0.5

静态方法

1.使用@staticmethod
2.不需要传入实力或者类作为第一个参数

#静态方法
@staticmethod
def intro():print("Dog is human's best friend")

输出示范:

print(Dog.intro())
print(d1.intro())

输出:

Dog is human’s best friend
None
Dog is human’s best friend
None

以上出现None的情况只需要将输出调整为:

Dog.intro()
d1.intro()

则输出:

Dog is human’s best friend
Dog is human’s best friend

继承和super()

class Dog:def __init__(self,name,height,power):self.name = nameself.height = heightself.blood = 10self.power = powerdef bark(self):print(f'我是{self.name},身高{self.height}')#牧羊犬
class SheepDog(Dog):def __init__(self,name,height,power,num_of_sheeps):super().__init__(name,height,power)#引用父类self.num_of_sheeps = num_of_sheeps#警犬
class PoliceDog(Dog):def __init__(self,name,height,power,ability):super().__init__(name,height,power)#引用父类self.ability = ability#宠物犬
class PetDog(Dog):def __init__(self,name,height,power,price):super().__init__(name,height,power)#引用父类self.price = pricesd1 = SheepDog('牧羊犬1',0.6,4,5)
print(sd.name)
print(sd.blood)
sd.bark()

添加方法:

#牧羊犬
class SheepDog(Dog):def __init__(self,name,height,power,num_of_sheeps):super().__init__(name,height,power)#引用父类self.num_of_sheeps = num_of_sheepsdef protect(self):print('我开始保护小羊啦!')#警犬
class PoliceDog(Dog):def __init__(self,name,height,power,ability):super().__init__(name,height,power)#引用父类self.ability = abilitydef detect(self):print('我发现小羊啦!')#宠物犬
class PetDog(Dog):def __init__(self,name,height,power,price):super().__init__(name,height,power)#引用父类self.price = pricedef sing(self):print('我在唱歌')     sd1 = SheepDog('牧羊犬1',0.6,4,5)
sd2 = PoliceDog('警犬1',0.5,5,6)
sd3 = PetDog('宠物犬1',0.3,2,2)sd1.protect()
sd2.detect()
sd3.sing()

输出:

我开始保护小羊啦!
我发现小羊啦!
我在唱歌

重写父类方法

 #牧羊犬
class SheepDog(Dog):def __init__(self,name,height,power,num_of_sheeps):super().__init__(name,height,power)#引用父类self.num_of_sheeps = num_of_sheepsdef protect(self):print('我开始保护小羊啦!')def bark(self):print(f'我是{self.name},我骄傲!')super().bark()

输出:

我是牧羊犬,我骄傲!
我是牧羊犬,身高0.6

命名规则

  1. 类名:驼峰,如Dog, SheepDog, HelloWord
  2. 方法名、变量名、参数、文件名:
    全小写,多个单词下划线链接,如sheep_god, hello_world
    如果是文件名,可以写成helloworld
    例: self._secrect = 9527#私有变量—约定
  3. 私有属性:变量名前加一个下划线,如_secret,只是约定
  4. Python解释器御用:方法名前加两个下划线,如__init__

Python面向对象,从农药到吃鸡 bilibili视频笔记相关推荐

  1. 用Python分析了1w场吃鸡数据,原来吃鸡要这么玩!

    微信改版,加星标不迷路! 用Python分析如何才能高效吃鸡? 作者:阿广 概述 前言 获取数据 观察数据 数据处理 吃鸡到底和哪个数据相关性最强? 分析热度图 期望研究的问题 结论 阿广说 推荐阅读 ...

  2. Python OOP 项目实践:从农药到吃鸡

    Python既是面向过程也是面向对象的 C是完全面向过程的 JAVA是完全面向对象的 1.创建类,在init方法中添加属性,self和默认值,创建对象,访问属性,修改属性 class Dog:def ...

  3. 用 Python 分析了 10000 场吃鸡数据,原来吃鸡要这么玩!

    作者 | 阿广 责编 | 屠敏 前言    绝地求生在国内火的一塌糊涂的时候,一款名叫 Fortnite 的游戏在国外刮起了堡垒旋风,这款同样为大逃杀玩法的沙盒类游戏,在绝地求生逐渐走低的形势下,堡垒 ...

  4. 吃鸡是python写的吗_吃鸡游戏也是用Python写的?学了Python,120个月年终奖向你招手~...

    原标题:吃鸡游戏也是用Python写的?学了Python,120个月年终奖向你招手~ 吃鸡游戏火爆全球,已经把腾讯的<王者荣耀>都比下去了,有传言,腾讯给"王者荣耀"开 ...

  5. 基于Python的绝地求生数据分析吃鸡攻略可视化(包含报告、答辩PPT以及代码打包)

    1 选题背景及需求简介 为了让 PUBG 玩家体会到通关的快乐,需要尽可能准确地推测出吃鸡概 率与多种因素的关系.基于 python 的绝地求生吃鸡攻略可视化就是由此设计 开发的,通过输入不同条件,可 ...

  6. 吃鸡 python开发_python实现《吃鸡大法》加文字识别 玩转百万英雄!

    <百万英雄>比较火.最近我也在玩,把高中的知识都还给教员了.10秒的答题时辰让人根柢来不及去百度搜索.于是我建造了这个剧本,对问题问题停止文字识别,主动翻开网页停止搜索.首先来看一下测试成 ...

  7. 吃鸡是python写的吗_吃鸡手游竟然是Python写的?

    软妹子也要学Python 听起来这么高大上的Python是不是很难学?并没有. 北邮在2010年就出版过一本<和孩子一起学Python>,Python真的是容易入门到可以作为亲子娱乐项目的 ...

  8. 吃鸡是python写的吗_吃鸡手游竟是这个编程语言所写,它荣登最流行的编程语言榜首...

    原标题:吃鸡手游竟是这个编程语言所写,它荣登最流行的编程语言榜首 吃鸡游戏火爆全球,已经把腾讯的<王者荣耀>都比下去了,有传言,腾讯给"王者荣耀"开发团队的年终奖就超过 ...

  9. 相比“农药和吃鸡”,这5个APP更应该多花时间!

    每天闲来无事的时间玩几局吃鸡,或者和小伙伴王者荣耀开黑,已经成为每天必不可少的了,其实这些碎片化的时间更应该利用起来在这几个APP上! 1.PEAK --集合了40多个锻炼大脑的游戏 --教练陪练个人 ...

最新文章

  1. 李沐团队提出最强ResNet改进版,多项任务达到SOTA | 已开源
  2. 代理模式及Java实现动态代理
  3. 统计概率分布_概率统计中的重要分布
  4. ajax中res和req,javascript – 来自AJAX调用的res.redirect
  5. 面条html5,使用 babel 全家桶模块化古老的面条代码
  6. 【C语言】(数组方式)输出一组成绩中的最高分与最低分
  7. python多线程有用吗_当CPU利用率已经接近100%时,多线程有帮助吗?
  8. json.loads解码字符串时出错:JSONDecodeError: Invalid \escape: line 1 column 2687 (char 2686)
  9. Python+selenium自动化测试环境安装
  10. Neural Architecture Search(NAS)强化学习寻找最优网络、NASNet、MNASNet
  11. 自动刷新网页脚本_抢不到票?你离idol只差一个大麦抢票脚本。
  12. MNN(二):借助Opencv实现MNN推理
  13. 搭建直播系统并实现h5播放rtmp
  14. 使用Tftpd64收集交换机日志
  15. 计算机硬盘格式化了如何恢复出厂设置,怎么把电脑格式化?
  16. 拆 米家台灯_拆机测评 篇二: 就是一台149元 Mijia 米家台灯,有什么可测的?...
  17. 2021平(jia)凡(ban)的一年
  18. deepin - PS CS6 弹出试用结束(解决方案)
  19. win10安装kafka kafka_2.13-2.8.1
  20. 微服务如何聚合 API 文档?这波操作也太秀了

热门文章

  1. DOS界面下的翻译软件制作
  2. android 连接蓝牙电子秤_Android实现蓝牙电子秤连接
  3. (Java实现) 最大团问题 部落卫队
  4. map写入文件及从文件读出
  5. 软件测试主管应具备的素质,软件测试人员应具备的素质
  6. 为了学(mo)习(yu),我竟开发了这样一个插件
  7. 机械工业c语言教程pdf,新编C语言程序计教程(机械工业出版社 钱雪忠 吕莹楠).doc...
  8. 小程序:密码加密加工器
  9. 【ffmpeg】——批量合并视频
  10. 深度解读当前主流公链的竞争格局