东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 10160|回复: 17
打印 上一主题 下一主题

[课堂笔记] 11、人工智能之Python机器学习_python的面向对象与类_笔记

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
跳转到指定楼层
楼主
发表于 2017-11-26 12:50:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
11、人工智能之Python机器学习_python的面向对象与类_笔记
创建一个类  动态 静态   属性 方法(函数)   实例化一个类
调用对象的属性 和 方法     创建任意数量的类的对象


给属性指定默认值 self.weight = 10
修改属性的值:1直接  2 方法
继承 自动获取父类的所有属性和方法  还可以有自己的
python2.7中的继承
自己的个性:给子类定义 属性 和 方法     重写


子类添加的细节越来越多   用另外一个类的实例作为属性   


导入类(命名问题):from 模块名 import 类名,
import 模块名   用句点表示法调用
from 模块名 import *
多个模块之间相互导入 也是这样的  组织项目代码  结构清晰


Python标准库  直接使用其他程序员编写的模块  举例:有序字典


编程规范:
1、类名:驼峰命名法 PetDog 大写   实例名 小写 dfy_pet_dog 下划线
2、类和模块 都应该有 文档字符串
3、类中 使用一个空行来分隔方法  多个类之间使用2个空行来分隔
4、需要同时导入python标准库和自己编写的模块时 先导入标准库的 后 空一行再导入自己的

让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

97

帖子

204

积分

中级会员

Rank: 3Rank: 3

积分
204
沙发
发表于 2017-12-22 00:50:34 | 只看该作者
谢谢东方曜老师
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
板凳
 楼主| 发表于 2018-1-9 12:33:19 | 只看该作者
  1. country = '中国'  #声明类属性,并且赋值
  2.     #实例属性通过构造方法来声明
  3.     #self不是关键字,代表的是当前而对象
  4.     def __init__(self,name,age,sex,address): #构造方法
  5.         #构造方法不需要调用,在实例化的时候自动调用
  6.         # print('我是构造方法,在实例化得时候调用')
  7.         self.name = name  #通过self 创建实例属性,并且赋值
  8.         self.age = age
  9.         self.sex = sex
  10.         self.__address = address #双下划线开头的属性是私有属性
复制代码
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
地板
 楼主| 发表于 2018-1-9 12:34:29 | 只看该作者

类属性 与 实例属性 区别
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
5#
 楼主| 发表于 2018-1-9 12:34:55 | 只看该作者
  1. # 双下划线开头的属性是私有属性
  2.     #外部要修改私有属性  预留一个接口去访问或者修改私有属性  这个就是正确的打开方式
  3.     def getAddre(self,pwd):
  4.         if pwd == '123':
  5.             return self.__address
  6.         else:
  7.             return '权限不够'
复制代码
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
6#
 楼主| 发表于 2018-1-9 12:38:42 | 只看该作者
  1. '''
  2. 1.餐馆:创建一个名为Restaurant的类,其方法__init__()设置两个属性:
  3. restaurant_name 和 cuisine_type(烹饪)。
  4. 创建一个名为 describe_restaurant()方法和一个名为open_restaurant ()
  5. 方法,其中前者打印前述两项信息,而后者打印一条消息,指出餐馆正在营业。
  6. 根据这个类创建一个名为restaurant的实例,分别打印其两个属性,
  7. 再调用前述两个方法。

  8. 2.三家餐馆:根据你为完成练习1而编写的类创建三个实例,
  9. 并对每个实例调用方法 describe_restaurant()。

  10. 4.就餐人数:在为完成练习1而编写的程序中,添加一个名为number_served的属性,
  11. 并将其默认值设置为0。打印有多少人在这家餐馆就餐过,然后修改这个值并再次打印
  12. 它。
  13. 添加一个名为set_number_served()的方法,它让你能够设置就餐人数。
  14. 调用这个方法并向它传递一个值,然后再次打印这个值。
  15. 添加一个名为increment_number_served()的方法,它让你能够将就餐人数递增.
  16. 调用这个方法并向它传递一个这样的值:你认为这家餐馆每天可能接待的就餐人数。


  17. '''
  18. class Restaurant():
  19.     '''
  20.         餐馆类
  21.     '''
  22.     def __init__(self,restaurant_name,cuisine_type,number_served = 0):
  23.         #声明两个实例属性
  24.         self.restaurant_name = restaurant_name #餐馆名字
  25.         self.cuisine_type = cuisine_type       #菜系
  26.         self.number_served = number_served

  27.     def describe_restaurant(self):
  28.         print('名称:%s,菜系:%s'%(self.restaurant_name,self.cuisine_type))


  29.     def open_restaurant(self):
  30.         print('欢迎光临%s,正在营业'%self.restaurant_name)


  31.     #设置就餐人数
  32.     def set_number_served(self,n):
  33.         self.number_served = n  #通过传递的参数给实例属性赋值
  34.         print('当前就餐人数:%d'%self.number_served)

  35.     #递增增加就餐人数
  36.     def increment_number_served(self,n):
  37.         for i in range(1,n+1):
  38.             self.number_served += 1
  39.             print('当前就餐人数:%d'%self.number_served)
复制代码
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
7#
 楼主| 发表于 2018-1-9 12:41:04 | 只看该作者
下面是多继承的例子:
  1. class A():
  2.     def a(self):
  3.         print('我是A里面的a方法')

  4. class B():
  5.     def b(self):
  6.         print('我是B里面的b方法')

  7.     def a(self):
  8.         print('我是B里面的a方法')

  9. class C():
  10.     def c(self):
  11.         print('我是C里面的c方法')

  12. class D(A,B,C):
  13.     def d(self):
  14.         print('我是D里面的d方法')

  15. dd = D()
  16. dd.d() #调用自己的方法
  17. dd.c()

  18. dd.a()
复制代码
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
8#
 楼主| 发表于 2018-1-9 15:58:48 | 只看该作者
下面例子是对 类方法与 静态方法的 区别:
  1. #-*- conding:utf-8 -*-

  2. class Person():
  3.     '''
  4.         这是一个人类
  5.     '''
  6.     country = '中国'  #声明类属性,并且赋值
  7.     #实例属性通过构造方法来声明
  8.     #self不是关键字,代表的是当前而对象
  9.     def __init__(self,name,age,sex,address,country): #构造方法
  10.         #构造方法不需要调用,在实例化的时候自动调用
  11.         # print('我是构造方法,在实例化得时候调用')
  12.         self.name = name  #通过self 创建实例属性,并且赋值
  13.         self.age = age
  14.         self.sex = sex
  15.         self.__address = address #双下划线开头的属性是私有属性
  16.         Person.country = country
  17.     #创建普通方法
  18.     def getName(self):
  19.         #类属性的使用通过类名.属性名使用 这是规范
  20.         #私有属性在类里面使用正常使用
  21.         print('我的名字叫:%s,我来自%s,我住在%s'%(self.name,person.country,self.__address)) #在方法里面使用实例属性

  22.     #创建一个静态方法
  23.     @staticmethod
  24.     def aa():  #不需要传递实例
  25.         #静态方法不能访问实例属性
  26.         #静态方法只能访问类属性
  27.         print('我的名字叫:%s'% Person.country)  # 在方法里面不能使用实例属性

  28.     #类方法
  29.     @classmethod
  30.     def bb(cls,n):  #class  也不是关键字
  31.         #类方法不能访问实例属性
  32.         cls.country = n
  33.         print('我的名字叫:%s' %cls.country )  #就用cls.类属性


  34. #实例化对象
  35. people01 = Person('joe',19,'男','上海', '美国')

  36. #通过对象来调用静态方
  37. # people01.aa()
  38. #通过对象来调用类方法
  39. # people01.bb()




  40. #静态方法和类方法的调用,推荐使用类名的方式去调用
  41. #通过类名来调用静态方法
  42. Person.aa()
  43. #通过类名来调用类方法
  44. Person.bb('usa')
复制代码
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
9#
 楼主| 发表于 2018-1-9 16:12:03 | 只看该作者
模拟一个简单的银行进行业务办理的类

类:
    创建一个银行类
属性:
    一个属于银行的类属性
        用来存储所用银行的开户信息,包含卡号、密码、用户名、余额
        (外界不能随意访问和修改。开户时要进行卡号验证,查看卡号是否已经存在)

    每个对象拥有(实例属性)
        卡号、密码、用户名、余额
        (外界不能随意访问和更改)

方法:
    银行类拥有
        查看本银行的开户总数
        查看所有用户的个人信息(包含卡号、密码、用户名、余额)
    每个对象拥有
        实例化对象的时候传入相关参数
            初始化对象及类属性
        取钱(需要卡号和密码验证)
            通过验证卡号和密码对个人的余额进行操作,如果取钱大于余额,返回余额不足
        存钱(需要卡号和密码验证)
            通过验证卡号和密码对个人的余额进行操作,返回操作成功
        查看个人详细信息(需要卡号密码验证)
            返回个人的卡号,用户名,余额信息   
'''
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
10#
 楼主| 发表于 2018-1-9 16:12:21 | 只看该作者
东方耀 发表于 2018-1-9 16:12
模拟一个简单的银行进行业务办理的类

类:
  1. class Bank():
  2.     #一个属于银行的类属性
  3.     __Users = {}


  4.     #每个对象拥有 卡号、密码、用户名、余额
  5.     def __init__(self,CradId,pwd,name,balance):
  6.         if CradId not in Bank.__Users:
  7.             Bank.__Users[CradId] = {'pwd':pwd,'Username':name,'Balance':balance}
  8.             self.__CradId = CradId
  9.             self.__pwd = pwd
  10.             self.__name = name
  11.             self.__balance = balance


  12.     #查看本银行的开户总数
  13.     @classmethod
  14.     def nums(cls):
  15.         print('当前用户数:%d'%(len(cls.__Users)))


  16.     #查看所有用户的个人信息(包含卡号、密码、用户名、余额)
  17.     @classmethod
  18.     def get_Users(cls):
  19.         for key,val in cls.__Users.items():
  20.             print('卡号:%s \n 用户名:%s \n密码:%d \n 余额:%d'%(key,val['Username'],val['pwd'],val['Balance']))
  21.             print()

  22.     #验证方法
  23.     @staticmethod
  24.     def check_User(CradId,pwd):
  25.         if (CradId in Bank.__Users) and (pwd == Bank.__Users[CradId]['pwd'] ):
  26.             return True
  27.         else:
  28.             return False
  29.     #验证金额
  30.     @staticmethod
  31.     def check_money(money):
  32.         if isinstance(money,int):
  33.             return True
  34.         else:
  35.             return False

  36.     # 取钱(需要卡号和密码验证)
  37.     def q_money(self,CradId,pwd,money):
  38.         if Bank.check_User(CradId,pwd):
  39.             #开始取钱
  40.             if Bank.check_money(money):
  41.                 if Bank.__Users[CradId]['Balance'] >= money:
  42.                     Bank.__Users[CradId]['Balance'] -= money
  43.                     print('当前卡号%s,当前取款金额%d,当前余额%d'%(CradId,money,Bank.__Users[CradId]['Balance']))
  44.                 else:
  45.                     print('余额不足')
  46.             else:
  47.                 print('您输入的金额有误')
  48.         else:
  49.             print('卡号或者密码有误')

  50.     # 存钱(需要卡号和密码验证)
  51.     def c_money(self,CradId,pwd,money):
  52.         if Bank.check_User(CradId,pwd):
  53.             #开始存钱
  54.             if Bank.check_money(money):
  55.                 Bank.__Users[CradId]['Balance'] += money
  56.                 print('当前卡号%s,当前存款金额%d,当前余额%d'%(CradId,money,Bank.__Users[CradId]['Balance']))
  57.             else:
  58.                 print('您输入的金额有误')
  59.         else:
  60.             print('卡号或者密码有误')

  61.     # 查看个人详细信息(需要卡号密码验证)
  62.     def getInfo(self,CradId,pwd):
  63.         if Bank.check_User(CradId, pwd):
  64.             print('当前卡号%s,当前用户名%s,当前余额%d' % (CradId, Bank.__Users[CradId]['Username'], Bank.__Users[CradId]['Balance']))
  65.         else:
  66.             print('卡号或者密码有误')


  67. joe = Bank('1001',111111,'joe',100)
  68. Bank.nums()
  69. print('_'*50)
  70. Bank.get_Users()
  71. print('_'*50)
  72. joe.c_money('1001',111111,500)
  73. print('_'*50)
  74. joe.q_money('1001',111111,300)
  75. print('_'*50)
  76. joe.getInfo('1001',111111)
复制代码
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-4-26 00:23 , Processed in 0.174778 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表