首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 面向对象

python 面向对象

作者头像
火星娃统计
发布2021-11-02 15:01:35
4410
发布2021-11-02 15:01:35
举报
文章被收录于专栏:火星娃统计火星娃统计

python 面向对象

1. 概述

相比较r语言的s3s4rc r6的混乱,python的面向对象比较规范,看着也比较舒服

2. 定义和函数

class ClassName:
   '类的帮助信息'   #类文档字符串
   class_suite  #类体

class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:

后续缩进一个tab用于写类的内容

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Employee:
   '所有员工的基类'# 这里的内容为类文档,通过__doc__调动
   empCount = 0 # 这里定义的内容为类属性

   def __init__(self, name, salary):# 初始化函数,也是每个实例化对象的属性
      self.name = name
      self.salary = salary
      Employee.empCount += 1 # 这里调用类属性,并实现叠加

   def displayCount(self):
     print "Total Employee %d" % Employee.empCount

   def displayEmployee(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)

self这个词指代的是类的实例化对象,因此init函数中的属性为实例化对象的属性

对于类属性的访问,通过点来进行,如 Employee.empCount

# 调用实例化对象的函数
emp1.displayEmployee()
emp2.displayEmployee()
  • 继承问题 继承的目的是避免代码的重复撰写,子类不仅能使用自己的函数和属性,同时在不编写函数的情况下使用父类的函数与属性 在使用继承的方式:类名(父类名) 多继承子类:(父类1,父类2)
#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Parent:        # 定义父类
   parentAttr = 100 # 父类的类属性
   def __init__(self):
      print "调用父类构造函数"

   def parentMethod(self):
      print '调用父类方法'

   def setAttr(self, attr):
      Parent.parentAttr = attr

   def getAttr(self):
      print "父类属性 :", Parent.parentAttr

class Child(Parent): # 定义子类
   def __init__(self):
      print "调用子类构造方法"

   def childMethod(self):
      print '调用子类方法'

c = Child()          # 实例化子类
c.childMethod()      # 调用子类的方法
c.parentMethod()     # 调用父类方法
c.setAttr(200)       # 再次调用父类的方法 - 设置属性值
c.getAttr()          # 再次调用父类的方法 - 获取属性值

2. 使用面向对象搭建神经网络

class MyModel(Model):
    # 需要继承Model
    def __init__ (self):
        super(MyModel, self).__init__()# super用于调用父类,init为初始化函数
        # 定义网络结构块,super继承要与类名一致
    def call(self, x):
    # 调用网络结构块,实现前向传播
        return y
model = MyModel()

使用类方法建立鸢尾花分类神经网络

import tensorflow as tf
from tensorflow.keras.layers import Dense
from tensorflow.keras import Model
from sklearn import datasets
import numpy as np
# 导入鸢尾花数据
x_train = datasets.load_iris().data
y_train = datasets.load_iris().target
# 使用shuffle将数据集打乱,避免数据顺序对模型的影响
np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)
# 搭建网络
class IrisModel(Model):
    def __init__(self):
        super(IrisModel, self).__init__() # 调用irismodeld父类model属性,
        # 然后把类irismodel的对象self转换为类model的对象,然后“被转换”的类model对象调用自己的_init_函数
        # 建立全连接层,激活函数为softmax l2正则化避免过拟合
        self.d1 = Dense(3, activation='softmax', kernel_regularizer=tf.keras.regularizers.l2())

    def call(self, x): # 调用搭建的网络,返回y
        y = self.d1(x)
        return y
#实例化对象
model = IrisModel()
# 搭建优化器sgd,损失函数,和衡量指标
model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])
# 模型拟合,批量32,循环500次
model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)
model.summary()

3. 结束语

看山不是山

love&peace

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 火星娃统计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python 面向对象
    • 1. 概述
      • 2. 定义和函数
        • 2. 使用面向对象搭建神经网络
          • 3. 结束语
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档