学习python的第四天(类,继承)

2024-04-30 21:32
文章标签 python 学习 继承 第四天

本文主要是介绍学习python的第四天(类,继承),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

每日小酌:这世界上,最富有的人,是跌倒最多的人;最勇敢的人,是每次跌倒都能站起来的人;最成功的人,是那些每次跌倒,不单能站起来,还能够坚持走下去的人。

开始学习

定义类关键字 class

init 是一个特殊的方法用于在创建对象时进行初始化操作不用的时候可写可不写

拿例题说事1

class tyler(object):# 类还可以不写object(默认就继承了object)创建 class tyler:  def __init__ (self,name,age):self.name = nameself.age = agedef study(self,course):self.course = courseprint('%s正在学习%s。'%(self.name,self.course))def watch(self):if self.age <18:print('%s只能看《熊出没》'%self.name)else:print('%s只能看《动作片》'%self.name)
if __name__ == "__main__":stu = tyler('asd',19)  #这里的()走的是初始化__init__函数,此函数有两个参数,所以要赋值stu.watch() # 调用类中的函数

这里也可以用main()函数调用

def main():#创建学生对象并指定姓名和年龄stu1 = tyler('琉璃', 38)# 给对象发study消息stu1.study('Pytho')# 给对象发watch_av消息stu1.watch()stu2 = tyler('玻璃门', 15)stu2.study('看书')stu2.watch()
if __name__ == '__main__':main()

拿例题说事2

class student:# 当你的类有一些公用变量的时候,你就可以初始化。def __init__(self,name):# 再类中,一切的变量和函数都要印记(self)self.name = namedef def1(self,num):self.num = numprint(self.num)print(self.name)def def2(self):print(self.name)print(self.num)
if __name__ == "__main__":stu = student('李四')  #()走的是初始化函数stu.def1(100)stu.def2()

练习

读取TXT文件,并输出里面的大写字母有多少个

class tyler(object):def __init__(self):self.count = 0passdef reada(self):with open ('C:/Users\\a\\Desktop\\ds.txt',mode='r') as f:lines = f.read()for line in lines:new_line = line.strip('\n')# print(new_line,end="")for i in new_line:if i.isupper():self.count +=1print('大写字母个数为%d'%self.count)if __name__ == "__main__":T = tyler()T.reada()

访问可见性的问题

在类中可以调用变量,函数,在函数中也可调用函数
私有变量,变量名前加‘__’
如果非要使用私有变量,那么可以使用dir(class())去查看他的真正名称
私有变量或函数,在类内部可以直接调用

如果你想体现一个变量或函数,可以使用‘_’

拿题说事

class test:def __init__(self,foo):self.__foo = foo #私有变量def __bar(self):print(self.__foo)print('__bar')
if __name__ == "__main__":ts = test("hello")          #AttributeError: 'test' object has no attribute '__bar'ts._test__bar()            #用私有的全名称来调用

@porperty装饰器

#将函数变成了一个属性 修改器和访问器的函数名要相同
#如果想要访问私有属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作

这时就可以考虑使用@property包装器来包装getter和setter方法

#说白了就是通过装饰器可以将私有的变量修改

class person (object):def __init__(self,name,age):self._name = nameself._age = age#访问器  - getter方法@propertydef name(self):return self._name#访问器  - getter方法@propertydef age (self):return self._age#修改器-- setter方法@age.setterdef age(self,age):self._age = agedef play(self):if self._age <16:print('%s正在玩游戏'%self._name)else:print('%s正在看书'%self._name)
if __name__ == "__main__":per = person('张三',45)per.play()per.age = 10     #可修改私有变量per.play()

slots ,魔法

如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定。需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。

class person (object):#限定person对象只能绑定_name,_age,_gender属性__slots__ = ('_name','_age','_gender')def __init__(self,name,age):self._name = nameself._age = age@propertydef name(self,name):return self._name@propertydef age(self):return self._age@age.setterdef age(self,age):self._age = agedef play(self):if self._age <16:print('%s正在玩飞行棋.' % self._name)else:print('%s正在玩斗地主.' % self._name)
if __name__ == "__main__":per = person('王二麻子',23)per.play()per._gender = '男'

静态方法和类方法

#用@staticmethod
from math import sqrt
class calss_a(object):def __init__(self, a, b, c):self._a = aself._b = bself._c = c@staticmethoddef is_valid(a, b, c):return a + b > c and b + c > a and a + c > bdef perimeter(self):return self._a + self._b + self._cdef area(self):half = self.perimeter() / 2return sqrt(half * (half - self._a) *(half - self._b) * (half - self._c)
def main():a, b, c = 3, 4, 5# 静态方法和类方法都是通过给类发消息来调用的if calss_a.is_valid(a, b, c):t = calss_a(a, b, c)print(t.perimeter())# 也可以通过给类发消息来调用对象方法但是要传入接收消息的对象作为参数# print(Triangle.perimeter(t))print(t.area())# print(Triangle.area(t))else:print('无法构成三角形.')if __name__ == '__main__':main()

继承

子类除了继承父类提供的属性和方法,还可以定义自己特有的属性和方法,所以子类比父类拥有的更多的能力


class person (object):def __init__(self, name, age):self.name = nameself.age = agedef play(self):print('%s正在愉快的玩耍.' % self.name)def watch(self):if self.age >= 18:print('%s正在观看爱情动作片.' % self.name)else:print('%s只能观看《熊出没》.' % self.name)class student(person):def __init__(self, name, age, grade):super().__init__(name, age)self._grade = grade@propertydef grade(self):return self._grade@grade.setterdef grade(self, grade):self._grade = gradedef study(self, course):print('%s的%s正在学习%s.' % (self._grade, self.name, course))if __name__ == "__main__":stu = student('大牛',15,'大三')stu.study('数学')

这篇关于学习python的第四天(类,继承)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949963

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

Python 字符串占位

在Python中,可以使用字符串的格式化方法来实现字符串的占位。常见的方法有百分号操作符 % 以及 str.format() 方法 百分号操作符 % name = "张三"age = 20message = "我叫%s,今年%d岁。" % (name, age)print(message) # 我叫张三,今年20岁。 str.format() 方法 name = "张三"age

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘