东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: 东方耀
打印 上一主题 下一主题

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

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

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

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

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

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

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14450
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

积分
14450
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

积分
14450
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

积分
14450
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

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

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

使用道具 举报

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14450
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 #双下划线开头的属性是私有属性
复制代码
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

97

帖子

204

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-18 00:43 , Processed in 0.182159 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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