当前位置:   article > 正文

深度学习笔记(python 面向对象高级编程)_python 面向对象深度学习

python 面向对象深度学习

自己看的视频网址:【深度学习保姆级教学】草履虫都能看懂!理论到实战、入门到起飞!人工智能基础入门必看!【ML机器学习|DL深度学习|CV计算机视觉|NLP自然语言处理】_哔哩哔哩_bilibili

机器学习流程

  • 数据获取
  • 特征工程(最核心的部分)
  • 建立模型
  • 评估与应

深度学习解决了怎么提取特征?


python入门知识

 来判断对象类型,使用type()函数

 lambda argument_list: expression(lambda x, y: x*y;函数输入是x和y,输出是它们的积x*y

 

 有没有既能检查参数,又可以用类似属性这样简单的方式来访问类的变量呢?对于追求完美的Python程序员来说,这是必须要做到的!

Python内置的@property装饰器就是负责把一个方法变成属性调用的:

  1. class Student(object):
  2. @property
  3. def score(self):
  4. return self._score
  5. @score.setter
  6. def score(self, value):
  7. if not isinstance(value, int):
  8. raise ValueError('score must be an integer!')
  9. if value < 0 or value > 100:
  10. raise ValueError('score must between 0 ~ 100!')
  11. self._score = value

还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性:


Mixin

MixIN的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MIxIn的功能,而不是设计多层次的复杂的继承关系

  1. class Dog(Mammal, RunnableMixIn, CarnivorousMixIn):
  2. pass

定制类

  1. >>> class Student(object):
  2. ... def __init__(self, name):
  3. ... self.name = name
  4. ... def __str__(self):
  5. ... return 'Student object (name: %s)' % self.name
  6. ...
  7. >>> print(Student('Michael'))
  8. Student object (name: Michael)

这样打印出来的实例,不但好看而且容易看出实例内部重要的数据。

如果直接敲变量不用print,会直接调用的是__repo__(),而不是__str__()。解决办法如下

 

  1. class Student(object):
  2. def __init__(self, name):
  3. self.name = name
  4. def __str__(self):
  5. return 'Student object (name=%s)' % self.name
  6. __repr__ = __str__

__iter__

如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的__next__()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。

  1. #我们以斐波那契数列为例,写一个Fib类,可以作用于for循环:
  2. class Fib(object):
  3. def __init__(self):
  4. self.a, self.b = 0, 1 # 初始化两个计数器a,b
  5. def __iter__(self):
  6. return self # 实例本身就是迭代对象,故返回自己
  7. def __next__(self):
  8. self.a, self.b = self.b, self.a + self.b # 计算下一个值
  9. if self.a > 100000: # 退出循环的条件
  10. raise StopIteration()
  11. return self.a # 返回下一个值

__getitem__  

要表现得像list那样按照下标取出元素,需要实现__getitem__()方法:

  1. class Fib(object):
  2. def __getitem__(self, n):
  3. a, b = 1, 1
  4. for x in range(n):
  5. a, b = b, a + b
  6. return a
  7. >>> f = Fib()
  8. >>> f[0]
  9. 1
  10. >>> f[1]
  11. 1
  12. >>> f[2]
  13. 2
  14. >>> f[3]
  15. 3
  16. >>> f[10]
  17. 89
  18. >>> f[100]
  19. 573147844013817084101

枚举类

当我们需要定义常量时,一个办法是用大写变量通过整数来定义 

但这样仍然是变量

更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能:

  1. from enum import Enum
  2. Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))

 这样我们就获得了Month类型的枚举类,可以直接使用Month.Jan来引用一个常量,或者枚举它的所有成员:

  1. for name, member in Month.__members__.items():
  2. print(name, '=>', member, ',', member.value)

 value属性默认从1自动开始计数

 

  1. from enum import Enum, unique
  2. @unique
  3. class Weekday(Enum):
  4. Sun = 0 # Sun的value被设定为0
  5. Mon = 1
  6. Tue = 2
  7. Wed = 3
  8. Thu = 4
  9. Fri = 5
  10. Sat = 6

使用元类 

type可以查看一个类型或变量的类型,也可以创建出新的类型

要创建一个class对象,type()函数要依次传入3个参数

  1. class的名称
  2. 继承的父类集合,注意python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法
  3. class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello
  1. >>> def fn(self, name='world'): # 先定义函数
  2. ... print('Hello, %s.' % name)
  3. ...
  4. >>> Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/345381
推荐阅读
相关标签
  

闽ICP备14008679号