在python中使用类中的函数(使用self或不使用)

时间:2017-04-14 14:44:05

标签: python function class self

class Neuralnetwork(object):

     def __init__(self, data):    
         self.data = data

     def scan(self):
         print(self.data)

     def sigmoid(self, z):
         g = 1 / (1 + math.exp(-z))
         return (g)

     a1 = sigmoid(7)
     print a1

我不确定为什么它不会使用sigmoid函数打印a1变量。它不断发出一个错误,说它需要2个输入而不是1个。但是我认为通过调用类中的函数,我没有再次为它提供自我?

编辑:我在那里有最后两个陈述,因为我还在测试一些东西,以确保一切都在做它在课堂上应该做的事情。

3 个答案:

答案 0 :(得分:0)

sigmoidNeuralnetwork类的一种方法,因此您需要首先创建Neuralnetwork类的实例,然后才能使用sigmoid类,如果你在课堂定义之后调用它:

class Neuralnetwork(object):
     def __init__(self, data):    
         self.data = data

     def scan(self):
         print(self.data)

     def sigmoid(self, z):
         g = 1 / (1 + math.exp(-z))
         return (g)

# replace data and z with appropriate values
nn = Neuralnetwork(data)
a1 = nn.sigmoid(z)
print a1

如果您需要在类中使用它,请将块放在方法中:

class Neuralnetwork(object):
     def __init__(self, data):    
         self.data = data

     def scan(self):
         print(self.data)

     def sigmoid(self, z):
         g = 1 / (1 + math.exp(-z))
         return (g)

     def print_sigmoid(self, z):
         a1 = self.sigmoid(z)
         print a1

# replace data and z with appropriate values
nn = Neuralnetwork(data)
nn.print_sigmoid(z)

我还建议根据PEP 8样式指南将班级名称更改为NeuralNetworkhttps://www.python.org/dev/peps/pep-0008/#class-names

答案 1 :(得分:0)

使用课外的最后两行(没有缩进),您可以使用以下命令修改它们:

a1 = Neuralnetwork(data).sigmoid(7)
print(a1)

但你必须向你的班级提供数据

答案 2 :(得分:0)

我注意到你的sigmoid方法根本不使用self,也就是说,它不依赖于实例。您可以将它作为正常功能放在课外。但是如果它与类紧密相关,你可能更喜欢将它作为静态方法包含在内,从sigmoid def中完全删除self:

#/usr/bin/env python3

import math

class NeuralNetwork(object):

    def __init__(self, data):    
        self.data = data

    def scan(self):
        print(self.data)

    @staticmethod
    def sigmoid(z):
        g = 1 / (1 + math.exp(-z))
        return (g)

a1 = NeuralNetwork('abc')
print(a1.sigmoid(7))