东方耀AI技术分享

标题: 11、人工智能之Python机器学习_python的面向对象与类_笔记 [打印本页]

作者: 东方耀    时间: 2017-11-26 12:50
标题: 11、人工智能之Python机器学习_python的面向对象与类_笔记
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标准库和自己编写的模块时 先导入标准库的 后 空一行再导入自己的


作者: 297490759    时间: 2017-12-22 00:50
谢谢东方曜老师
作者: 东方耀    时间: 2018-1-9 12:33
  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 #双下划线开头的属性是私有属性
复制代码

作者: 东方耀    时间: 2018-1-9 12:34
东方耀 发表于 2018-1-9 12:33

类属性 与 实例属性 区别
作者: 东方耀    时间: 2018-1-9 12:34
  1. # 双下划线开头的属性是私有属性
  2.     #外部要修改私有属性  预留一个接口去访问或者修改私有属性  这个就是正确的打开方式
  3.     def getAddre(self,pwd):
  4.         if pwd == '123':
  5.             return self.__address
  6.         else:
  7.             return '权限不够'
复制代码

作者: 东方耀    时间: 2018-1-9 12:38
  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)
复制代码

作者: 东方耀    时间: 2018-1-9 12:41
下面是多继承的例子:
  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()
复制代码

作者: 东方耀    时间: 2018-1-9 15:58
下面例子是对 类方法与 静态方法的 区别:
  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')
复制代码

作者: 东方耀    时间: 2018-1-9 16:12
模拟一个简单的银行进行业务办理的类

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

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

方法:
    银行类拥有
        查看本银行的开户总数
        查看所有用户的个人信息(包含卡号、密码、用户名、余额)
    每个对象拥有
        实例化对象的时候传入相关参数
            初始化对象及类属性
        取钱(需要卡号和密码验证)
            通过验证卡号和密码对个人的余额进行操作,如果取钱大于余额,返回余额不足
        存钱(需要卡号和密码验证)
            通过验证卡号和密码对个人的余额进行操作,返回操作成功
        查看个人详细信息(需要卡号密码验证)
            返回个人的卡号,用户名,余额信息   
'''
作者: 东方耀    时间: 2018-1-9 16:12
东方耀 发表于 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)
复制代码

作者: 东方耀    时间: 2018-1-9 16:23
练习:亡者农药小游戏

1、创建三个游戏人物,分别是:
属性:
    名字:name,定位:category,血量:Output技能:Skill
英雄:
    铠,战士,血量:1000 技能:极刃风暴
    王昭君,法师 ,血量:1000 技能:凛冬将至
    阿轲,刺客,血量:1000 技能:瞬华

2、游戏场景,分别:

偷红buff,释放技能偷到红buff消耗血量300
solo战斗,一血,消耗血量500
补血,加血200

'''
作者: 东方耀    时间: 2018-1-9 16:23
东方耀 发表于 2018-1-9 16:23
练习:亡者农药小游戏

1、创建三个游戏人物,分别是:
  1. class hero():

  2.     #定义属性
  3.     def __init__(self,name,category,skill,output=1000,score = 0):
  4.         self.name = name
  5.         self.category = category
  6.         self.skill = skill
  7.         self.output = output
  8.         self.score = score

  9.     #战斗场景1,偷红BUFF
  10.     def red_buff(self):
  11.         self.output -= 300
  12.         print('%s%s到对面野区偷红BUFF,消耗血量300'%(self.category,self.name))

  13.     #战斗场景2solo战斗
  14.     def solo(self,n=1):
  15.         self.output -= 500
  16.         if self.output < 0:
  17.             print('%s%s,送了一个人头,血染王者峡谷'%(self.category,self.name))
  18.         else:
  19.             if self.score == 0:
  20.                 self.score += n
  21.                 print('%s%s solo战斗拿到一血,消耗血量500'%(self.category,self.name))
  22.             else:
  23.                 self.score += n
  24.                 print('%s%s solo战斗拿收割%d个人头,消耗血量500'%(self.category,self.name,n))


  25.     #场景三,加血
  26.     def add_xue(self):
  27.         self.output += 200
  28.         print('%s%s被辅助及时奶了一口,加血200'%(self.category,self.name))


  29.     #查看英雄相惜信息
  30.     def getInfo(self):
  31.         if self.output <= 0:
  32.             print('%s%s,正在复活,拿到%d个人头'%(self.category,self.name,self.score))

  33.         else:
  34.             print('%s%s超神啦!血量还有%d,拿到%d个人头'%(self.category,self.name,self.output,self.score))


  35. #实例化对象
  36. kai = hero('铠','战士','极刃风暴')

  37. #操作
  38. kai.red_buff()
  39. kai.getInfo()
  40. kai.solo()
  41. kai.getInfo()
  42. kai.add_xue()
  43. kai.getInfo()
  44. kai.solo()
  45. kai.getInfo()
复制代码

作者: wdzhlfl    时间: 2018-2-1 09:31
概述与Python环境搭建
作者: 青青子豫    时间: 2018-3-16 09:26
非常感谢,正是我需要的
作者: longjiacheng    时间: 2018-3-19 21:22
6666666666666666666666666666
作者: Liuw    时间: 2018-9-17 17:13
11111111111111111111111111111111
作者: zocmiu    时间: 2020-3-1 11:43
好老师,谢谢楼主分享!66666666666666666
作者: 栀子花    时间: 2020-4-23 10:11

一定好好学习




欢迎光临 东方耀AI技术分享 (http://www.ai111.vip/) Powered by Discuz! X3.4