Python学习笔记 八:面向对象编程完整篇

Adeline ·
更新时间:2024-09-20
· 913 次阅读

我之前也写了一篇关于面向对象编程的博客,两篇博客内容相近,包含了我这两次学习的全部内容

第一篇博客

1. 转义字符 \n:换行 \t:制表符,tab “\”号后面可以跟八进制或者十六进制来表示字符,如\141、\x61表示a “\”号后面可以跟Unicode字符编码来表示字符 如果不希望“\”表示转义,前面可以跟r,如r\ 2. 格式化 方法一:用“%” 方法二:使用format 方法三:在字符串前加上字母f a, b = 5, 10 # 方法1: print('%d * %d = %d' % (a, b, a * b)) # 方法2: print('{0} * {1} = {2}'.format(a, b, a * b)) # 方法3: print(f'{a} * {b} = {a * b}') # 适用于python 3.6以后的版本 3. 面向对象编程

对于面向对象,我想大家都不陌生,但是怎么简要的概括什么是面向对象呢?这是一个很有意思的问题。我学习过c语言、c#、java等编程语言,但是对面向对象的解释依然不是很明确。这是一直困扰着我的问题,什么是面向对象?

"把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。"这样的解释也许不好明白

但是今天看到一个解释,也许更通俗易懂:
知乎图片

4. 类和对象 简单的说,类是对象的蓝图和模板,而对象是类的实例。 这个解释虽然有点像用概念在解释概念,但是从这句话我们至少可以看出 类是抽象的概念,而对象是具体的东西。 在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类(型)。 当我们把一大堆拥有共同特征的对象的静态特征(属性)和动态特征(行为)都抽取出来后,就可以定义出一个叫做“类”的东西。 5. 定义类 class关键字 其中,写在类中的函数,我们通常称之为(对象的)方法,这些方法就是对象可以接收的消息 class Student(object): # __init__是一个特殊方法用于在创建对象时进行初始化操作 # 通过这个方法我们可以为学生对象绑定name和age两个属性 def __init__(self, name, age): self.name = name self.age = age def study(self, courseName): print('%s正在学习%s.' % (self.name, courseName)) # PEP 8要求标识符的名字用全小写多个单词用下划线连接 # 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识) def watchMovie(self): if self.age < 12: print('%s观看《喜羊羊》.' % self.name) else: print('%s快去学校上课.' % self.name) 6.创建和使用对象 当定义好一个类之后,可以通过下面的方式来创建对象,并给对象发消息 def main(): # 创建学生对象并指定姓名和年龄 stu1 = Student('amy', 21) # 给对象发study消息 stu1.study('Python') # 给对象发watchMovie消息 stu1.watchMovie() stu2 = Student('李小白', 15) stu2.study('高等数学') stu2.watchMovie() if __name__ == '__main__': main() 7.访问可见性问题 在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头 class Test: def __init__(self, name): self.__name = Jackson def __bar(self): print(self.__name) print('__age') def main(): test = Test('hello') test.__age() # AttributeError: 'Test' object has no attribute '__age' print(test.__name) # AttributeError: 'Test' object has no attribute '__name' if __name__ == "__main__": main()
案例1:设计一个函数产生指定长度的验证码,验证码由大小写字母和数字构成 import random def generateCode(codeLen=4): """ 生成指定长度的验证码 :param codeLen: 验证码的长度(默认4个字符) :return: 由大小写英文字母和数字构成的随机验证码 """ allChars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' lastPos = len(allChars) - 1 # 生成allChars的长度,应为:61 code = '' # 以空格隔开 for _ in range(codeLen): index = random.randint(0, lastPos) code += allChars[index] return code 案例2:打印杨辉三角 def main(): num = int(input('请输入行数为: ')) yh = [[]] * num for row in range(len(yh)): yh[row] = [None] * (row + 1) for col in range(len(yh[row])): if col == 0 or col == row: yh[row][col] = 1 else: yh[row][col] = yh[row - 1][col] + yh[row - 1][col - 1] print(yh[row][col], end='\t') print() if __name__ == '__main__': main() 案例3:双色球选号 这个例子涉及到相对专业的知识,我没有读懂,希望读者看完之后,能够告诉我你的想法。 from random import randrange, randint, sample def display(balls): """ 输出列表中的双色球号码 """ for index, ball in enumerate(balls): if index == len(balls) - 1: print('|', end=' ') print('%02d' % ball, end=' ') print() def random_select(): """ 随机选择一组号码 """ red_balls = [x for x in range(1, 34)] selected_balls = [] selected_balls = sample(red_balls, 6) selected_balls.sort() selected_balls.append(randint(1, 16)) return selected_balls def main(): n = int(input('机选几注: ')) for _ in range(n): display(random_select()) if __name__ == '__main__': main()
综合案例1:定义一个类描述自动走时数字时钟 from time import sleep class Clock(object): """数字时钟""" def __init__(self, hour=0, minute=0, second=0): """初始化方法 :param hour: 时 :param minute: 分 :param second: 秒 """ self._hour = hour self._minute = minute self._second = second def run(self): """走字""" self._second += 1 if self._second == 60: self._second = 0 self._minute += 1 if self._minute == 60: self._minute = 0 self._hour += 1 if self._hour == 24: self._hour = 0 def show(self): """显示时间""" return ('%02d:%02d:%02d' % (self._hour, self._minute, self._second)) def main(): clock = Clock(12, 00, 00) while True: print(clock.show()) sleep(1) clock.run() if __name__ == '__main__': main()
作者:amy_ bro



python学习 面向对象编程 对象 面向对象 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号