类中一个常见的魔术方法

 class pipei():def __init__(self,name,age,high):         self.name = nameself.age = ageself.high = highprint('姓名{},年龄{},身高{}'.format(name,age,high))passpipei('杨丽宝',18,165print(pipei)

self 其实可以换成其他名称只不过是约定俗称都用self指代自身
下面是想学习到的小游戏

class Role():def __init__(self,name,hp):self.name = nameself.hp=hppassdef tong(self,enemy):enemy.hp -= 10info='{}捅了{}一刀'.format(self.name,enemy.name)print(info)passdef kan(self,enemy):enemy.hp -= 15info = '{}砍了{}一刀'.format(self.name, enemy.name)print(info)passdef yao(self):self.hp+=10info='{}吃了药'.format(self.name)passdef __str__(self):return '{}剩余血量{}'.format(self.name,self.hp)xmcx = Role('西门吹雪',100)
ygc = Role('叶孤城',100)
xmcx.tong(ygc)
print(xmcx)
print(ygc)
print('********************************')
ygc.kan(xmcx)
print(xmcx)
print(ygc)
print('********************************')
xmcx.yao()
print(xmcx)
print(ygc)

其中在调用xmcx.tong(ygc)的函数时ygc占用了定义中的enemy变量此时运行ygc.hp-=10,然后程序找到__init__中的self.hp进行操作。

继承

直接看例子

class Animal:def chi(self):print('吃')passdef he(self):print('喝')passclass dog(Animal):def jiao(self):print('汪汪叫')passclass cat(Animal):def jiao(self):print('喵喵叫')passCat = cat()
Dog = dog()
Dog.jiao()
Dog.chi()
Dog.he()
Cat.jiao()
Cat.chi()
Cat.he()
汪汪叫
吃
喝
喵喵叫
吃
喝

这里面的Animal()就是父类,在定义cat()的类时括号里可以继承多父类比如
cat(object1,object2,object3)这样就可以同时继承object1-3的父类
如果三个父类中有相同的方法(就好比他们都有chi()的函数)那么程序会从左到右查找哪个父类中有这个函数,有就调用,没有就找下一个。如果有嵌套父类那就按层数来,比如object2继承object4那么如果在查找object2时没有找到想要的函数,那么就去找object3,如果再没就再去找object2的父类,就是按层次一层一层从左到右查找。

重写父类方法

class Animal:def chi(self):print('吃')passdef he(self):print('喝')pass
class cat(Animal):def jiao(self):print('喵喵叫')def chi(self):print('吃猫粮')pass

在此程序中,cat()函数继承了Animal()但是在cat()中也有chi(self)的函数,那么子类的函数将覆盖掉父类中的同名函数,输出将会是’吃猫粮‘,魔术方法__init__等亦是如此

super().__init__()

自动寻找父类继承

多态

定义时的类型和使用时的类型不一样,构成多态
在下面代码中增加功能只需要定义类class Bird():之后重写父类方法,在列表中添加这个类即可。重点在于obj.say_who()的使用
多态的好处就是增加程序的灵活性

class Animal:'''父类【基类】'''def say_who(self):print('我是一个动物')passpass
class Duck(Animal):'''鸭子类【子类】'''def say_who(self):'''在此重写父类方法'''print('我一只鸭子')passpass
class Dog(Animal):def say_who(self):print('我是一只狗')passpassdef commonInvoke(obj):'''统一调用方法:param obj: 对象的实例:return:'''obj.say_who()listObj = [Duck(), Dog()]
for item in listObj:'''循环调用函数'''commonInvoke(item)

类属性和实例属性

类属性:类对象所拥有的属性,被所有类对象的实例对象所共有,类对象和实例对象可以访问
实例属性:实例对象所拥有的属性,只能通过实例对象访问

class Student():name='杨丽宝' #属于类属性 就是student类对象所拥有的def __init__(self,age):self.age = age #实例属性passpass
ylb=Student(18) #ylb为实例对象
print(ylb.age)
print(ylb.name)  #ylb这个实例可以访问name和age两个属性 通过实例对象访问类属性
print('--------通过类对student象访问name-----------------')
print(Student.name)
#print(Student.age)  #这一句会报错
'''
类属性是可以被类对象和实例对象共同访问使用的
实例属性只能由实例对象所访问
'''

类方法和静态方法

类对象所拥有的方法,需要用装饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数,类方法可以通过类对象实例对象调用。
简答来说就是在方法的上加上@classmethod

class People:country='china'#类方法 用classmethod 来进行修饰@classmethoddef get_country(cls):return cls.country  #访问类属性pass@classmethoddef change_country(cls,data):cls.country=data  #修改类属性的值 在类方法中passpassprint(People.get_country())  #通过类对象去引用
p=People()
print('实例对象访问', format(p.get_country()))
print('---------------------修改之后----------------------------')
People.change_country('英国')
print(People.get_country())china
实例对象访问 china
---------------------修改之后----------------------------
英国进程已结束,退出代码0

静态方法:类对象所拥有的方法,需要用@staticmethod来表示静态方法,静态方法不需要任参数。

class People:country='china'#类方法 用classmethod 来进行修饰@classmethoddef get_country(cls):return cls.country  #访问类属性pass@classmethoddef change_country(cls,data):cls.country=data  #修改类属性的值 在类方法中pass@staticmethoddef getData():return People.countrypassprint(People.getData())
# print(People.get_country())  #通过类对象去引用
p=People()
print(p.getData())  #一般情况下 我们不会通过实例对象去访问静态方法
#静态方法主要来存储逻辑性代码,本身和类以及实例对象们没有交互,
#在静态方法中,不会涉及到类中方法和属性的操作
# 数据资源能够得到充分的利用
import time  #引入时间模块
class TimeTest:def __init__(self,hour,min,second):self.hour=hourself.min=minself.second=second@staticmethoddef showTime():return time.strftime("%H:%M:%S",time.localtime())passpass
print(TimeTest.showTime())  #非实例 并没有用到@staticmethod上面def的部分
t=TimeTest(1,2,3)  #实例 但没必要这样访问
print(t.showTime())15:15:46
15:15:46

类方法的第一个参数是类对象cls 进而引用类对象的属性和方法
实例方法的第一个参数必须是self 通过这个self可以去引用类属性或实例属性
若存在相同的实例属性和类属性的话,实例属性优先级最高
静态方法不需要定额外的参数

python学习笔记(类)相关推荐

  1. Python 学习笔记 类的封装 类的继承 多态继承 类方法和静态方法 单例设计模式

    一.类的封装: 1.概念: 广义的封装:函数和类的定义本身,就是封装的体现 狭义的封装:一个类的某些属性,在使用的过程 中,不希望被外界直接访问,而是把这个属性给作为私有的[只有当前类持有],然后暴露 ...

  2. 廖雪峰Python学习笔记——类和实例

    Class MyList(list): __metaclass__ = ListMetaclass #它表示在创建MyList这个类时,必须通过 ListMetaclass这个元类的LIstMetac ...

  3. python学习笔记——类

    # coding='utf-8'class User():def __init__(self,name,sex):self.name = nameself.sex = sexprint '这里是构造函 ...

  4. Python学习笔记④——类、面向对象的三大特征 [封装+继承+多态]

    ✅ Blogger Learns Python is for learning the "Deep Learning". 文章目录 一.面向对象编程的简介 二.类与对象 -- 基础 ...

  5. Python学习笔记:创建分数类

    Python学习笔记:创建分数类 1.编写创建分数类.py # 创建分数类from math import gcd# 定义分数类 class Fraction: def __init__(self, ...

  6. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

  7. Python学习笔记28:从协议到抽象基类

    Python学习笔记28:从协议到抽象基类 今后本系列笔记的示例代码都将存放在Github项目:https://github.com/icexmoon/python-learning-notes 在P ...

  8. Python学习笔记(九):类和对象

    Python学习笔记(九):类和对象 关于类和对象 Python学习笔记(九):类和对象 一.类和对象 类的定义 类的实例化 类对象的使用 二.self用法 三.类方法 实例方法 类方法 静态方法 静 ...

  9. Python学习笔记16:实操案例十三(编写程序实现乐手弹奏乐器,设计自定义类表达出租车和家用轿车信息)

    Python学习笔记16:实操案例十三(编写程序实现乐手弹奏乐器,设计自定义类表达出租车和家用轿车信息) 1.编写程序实现乐手弹奏乐器 注意Python的多态是"鸭子类型",只要有 ...

  10. [python教程入门学习]python学习笔记(CMD执行文件并传入参数)

    本文章向大家介绍python学习笔记(CMD执行文件并传入参数),主要包括python学习笔记(CMD执行文件并传入参数)使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋 ...

最新文章

  1. Python忽略warning警告错误
  2. wsasend发送不可靠_架构师总结:kafka 如何保证数据的可靠性和一致性
  3. python画折线图代码-python编程:如何使用python代码绘制折线图?
  4. swoole 简单的聊天室
  5. linux usb 触摸屏驱动,请教大家一个linux下的usb触摸屏驱动的问题
  6. Linux系统7z文件解压
  7. python中封装一个枚举_JavaScript可扩展枚举封装
  8. linux c 数据库访问框架,linux c 开发通用结构,框架
  9. 【CF1179 A,B,C】Valeriy and Deque / Tolik and His Uncle / Serge and Dining Room
  10. 算法工程师面试备战笔记12_决策树
  11. 一个简单的获取时间的程序
  12. Windows下使用SSH命令登录Linux服务器
  13. 报表生成器FastReport .Net如何存储和加载报告
  14. 中国各省市及省会城市名称的由来
  15. 三分钟搭建单节点私链教程
  16. Python爬虫(四)——小说下载器
  17. python怎么读取表格中的数据_如何用Python读取电子表格中的数据,面试必学
  18. Retina、非Retina、点、像素、iPhone分辨率
  19. web前端培训—css源码笔记(二)【爱创课堂】
  20. 【转】DDR3中的ODT

热门文章

  1. 计算机主机型号查询,如何查询电脑硬件的型号
  2. 万圣节来了,虾皮选品早知道
  3. 互联网程序员行话(黑话)合集
  4. 笔记---怪诞行为学
  5. 翻译Stairway to SQL Server Security Level 3: Principals and Securables
  6. 浅析企业级应用系统--ERP
  7. 中国股民心理一——情绪决定输赢?性格影响财富?热衷追涨杀跌?
  8. 德国股神:有钱的人可以投机;没钱的人必须投机
  9. [附源码]计算机毕业设计JAVA大学城二手书交易网站
  10. 学生用计算机的电流是多少,220V家用电源的电流是多少mA?