【百度领航团/飞桨/AI Studio】Python 学习笔记 —— 04

前言:这一节可大概讲了类的基本使用。后三节课换了一位老师讲课,这位老师很注重实际应用,前大半节课都在讲实际例子。也有人抱怨拖时间没什么干货,我感觉各有道理。我想听多点干货,也不想错失实践技巧。老师的讲课各有不同,自适应比较好。


———————————————

《百度飞桨领航团零基础Python速成营》 课程笔记 —— 04

笔记依据 / 老师讲义:
课节4: Python面向对象(上)
https://aistudio.baidu.com/aistudio/projectdetail/1525879

一、读取文本

  • 这也是固定套路了,差不多熟背即可。
  • 关于更多的文本操作,自查。
# 读取文件内容
def get_coach_data(filename):
    with open(filename) as f:
        line = f.readline()
    return line.strip()

二、应用技巧

  • 老师花了较大的篇幅讲述了一个“需求:选手的最好的三次成绩”的例子。
  • 总结,实际应用中,数据要添加基本标识 —— 对应例子中的名字和日期。数据还要归类 —— 巧用字典打包。但还是很乱,所以学习新的方式 —— 引出类的使用。

三、类 (对象、实例等概念)

菜鸟教程 - Python3 面向对象
https://www.runoob.com/python3/python3-class.html

1)使用类的好处

  1. 降低复杂性-》更少的bug-》提高可维护行;
  2. 类可以将数据与函数绑定在一起,使代码模块化;
  3. 调用数据和函数,使用对象名.的方式,使代码更加优雅。

2)规范名词

代码 通常称为 类的 方法
数据 通常称为 类的 属性
实例化的对象 称为 实例

  • 我自己在看文献时,时常搞混这些名词,除了这些,还有实例的属性,实例的方法等,扣定义描述远不如一段简单明了的代码来得清晰。

3)定义类 & 使用类 & 类属性

  • __init__方法(类中的函数都称作方法)很重要,这个方法的专业名词为“构造方法。”每次创建实例时都会执行一次,用来给实例属性赋值,也可以调用执行函数。
  • 值得提醒的是,没有集成父类时,类的名字在定义时可以不需要加括号:“class Athlete:”。(还是加比较好)
class Athlete:
    #运动员集训了,要买东西的同学要把地址改一下
    address = '中国足球协会训练基地xx街xx号'   #我也不知道为什么要写这个,作业提示说写的'
    def __init__(self,a_name,a_dob=None,a_times=[]):
        self.name = a_name
        self.dob = a_dob
        self.times = a_times

    def top3(self):
      self.time = self.sanitize(self.time)
      return sorted(self.time)[0:3:1]
      # print(f'姓名:{self.name};日期:{self.dob};前三次成绩:{sorted(self.time)[:3:1]}')
        
    def sanitize(self,time_string):
      Set = set()
      for i in time_string:
        if '-' in i or ':' in i:
          i = i.replace('-','.',1)   # 无论有没有都可以替换,妙啊
          i = i.replace(':','.',1)
        Set.add(i)
      return list(Set)
        
    @classmethod
    def changeAddress(cls):
        cls.address = '中国田径训练基地xx街xx号'
        address = cls.address+'1'  # 证明这样不可以调用
        Athlete.address = cls.address+'2'   # 证明这样也可以调用
        # self.address = cls.address+'3'   # 证明这个会报错
        
him = Athlete('him',20000311,3.14)
print(him.address)
Athlete.changeAddress()
print(him.address)
  • 注意,类属性的调用,有特定的作用顺序。如果忘记了就打开python敲一遍。

4)私有化 - (隐藏化) dir

  • 专业术语称“私有”,指不能被外部直接调用(属性/变量 ,和方法/函数,都可以私有化),隐藏起来了。其实本质上只是改了个名字,如果使用改后名字就可以直接调用了。使用内置方法class.__dir__()打印所有名字,就可以找到被改后的名字了。
class Person(object):
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    def getAge(self):
        return self.__age

    def setAge(self, age):
        self.__age = age

p1 = Person("张三", 23)
p1.setAge(24)
print(p1.getAge())  # 打印结果:24
print(p1.__dir__())
# 打印结果:
"""
   ['_Person__name', '_Person__age', '__module__', '__init__', 'getAge', 'setAge', 
    '__dict__', '__weakref__', '__doc__', '__repr__', '__hash__', '__str__', 		'__getattribute__', '__setattr__', '__delattr__', '__lt__', '__le__', '__eq__', 	'__ne__', '__gt__', '__ge__','__new__', '__reduce_ex__', '__reduce__', 			'__subclasshook__', '__init_subclass__','__format__', '__sizeof__', '__dir__', 	   '__class__'] 
"""
p1._Person__age = 30
print(p1._Person__age)  # 打印结果:30
print(p1.getAge())  # 打印结果:30

5)内置方法

  • 在类中加了下划线的,一般都被称为内置(个人理解),其中__init____dir__都算是。
  • 在以往的课程中还学过__call__,可直接使用实例名()的形式调用。(初学时被这种操作完全搞蒙了,不知道是类还是函数,甚至数据变量。后来有了概念:“所有都是对象”,类名,函数名,本质也是个变量。就感觉顺畅多了。)
  • 更多内置方法不介绍了,自查。

猜你喜欢

转载自blog.csdn.net/Lovely_him/article/details/113759403