Отправить `char` в качестве входного параметра для функции - PullRequest
0 голосов
/ 10 мая 2019

Мой вопрос прост: можно ли отправить char в начале программы на Python для функции данного класса?

 class barberShop(object):

     def __init__(self):
         self.nBlock = 0
         self.nClients = 0
         self.nChairsOccupied = 0
         #self.event = e

     def throwEvent(self, e):
         if e is 'A':
             t = int(random.expovariate(1 / 20))


 if __name__ == '__main__':
     e = 'A'
     barberShop.throwEvent(e)

Насколько я знаю, я не могу. У меня ошибка Как это сделать правильно?

Ответы [ 4 ]

0 голосов
/ 10 мая 2019

Вы смешиваете две вещи здесь. Вы определили throwEvent как метод класса, но вы называете его как статический метод, вам нужно выбрать один подход

Так что, если вы решите егобудучи методом класса, вам нужно использовать объект класса для его вызова следующим образом:

import random

class barberShop(object):

    def __init__(self):
        self.nBlock = 0
        self.nClients = 0
        self.nChairsOccupied = 0
        # self.event = e

    #It is a class method
    def throwEvent(self, e):
        if e is 'A':
            t = int(random.expovariate(1 / 20))

#Using class instance object to call throwEvent
e = 'A'
bs = barberShop()
bs.throwEvent(e)

Если вы решите, что это статический метод, вам нужно определить его как статический метод с использованием декоратора @staticmethod,и избавиться от self

import random

class barberShop(object):

    def __init__(self):
        self.nBlock = 0
        self.nClients = 0
        self.nChairsOccupied = 0
        # self.event = e

    #It is a static method
    @staticmethod
    def throwEvent(e):
        if e is 'A':
            t = int(random.expovariate(1 / 20))

#Using class name to call throwEvent
e = 'A'
barberShop.throwEvent(e)
0 голосов
/ 10 мая 2019
import random 
class barberShop(object):

     def __init__(self):
         self.nBlock = 0
         self.nClients = 0
         self.nChairsOccupied = 0
         #self.event = e
     @staticmethod
     def throwEvent( e):
         if e is 'A':
             return  int(random.expovariate(1 / 20))


if __name__ == '__main__':
     e = 'A'
     print(barberShop.throwEvent(e))
0 голосов
/ 10 мая 2019

На данный момент у вас есть

def throwEvent(self, e):

, но вы звоните barberShop.throwEvent(e), поэтому вы получите сообщение об ошибке типа

TypeError: throwEvent() missing 1 required positional argument: 'e'

self означает, что вы вызываете его наНапример:

if __name__ == '__main__':
    e = 'A'
    shop = barberShop()
    shop.throwEvent(e)

В существующем состоянии throwEvent ничего не делает, поэтому вы не увидите много, но ошибка прекратится.


Вы можете прибегнуть к некоторому хакерству, например:

barberShop.throwEvent(None, e)

Функция отправит экземпляр, если вы вызовете его для экземпляра, так что вы можете подумать о

shop.throwEvent(e)

как

barberShop.throwEvent(shop, e)

Если у вас нет экземпляра, используйте вместо него None.

Конечно, если вы никогда не хотите вызывать этоэкземпляр, не делайте его методом экземпляра.Удалите self из функции:

def throwEvent(e):
     if e is 'A':
         t = int(random.expovariate(1 / 20))

В этом случае, я бы удивился, почему это в вашем классе.

0 голосов
/ 10 мая 2019

Сначала необходимо создать экземпляр класса barberShop:

barberShop_= barberShop()

throwEvent в вашем фрагменте выше - это метод экземпляра. Вы не проходите «Я» непосредственно к нему. Вместо этого вам нужно создать экземпляр в Чтобы использовать это. «Я» аргумент функции на самом деле экземпляр он вызывается.

пример:

a = A()
a.functionA(3)

в вашем случае:

    barberShop_= barberShop()
    barberShop_.throwEvent(e)

Решение:

if __name__ == '__main__':
    e = 'A'
    barberShop_= barberShop()
    barberShop_.throwEvent(e)

или

if __name__ == '__main__':
    e = 'A'
    barberShop().throwEvent(e)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...