Python 3 - классы и частные объекты - PullRequest
0 голосов
/ 24 августа 2018

Я новичок в python и не знаю, почему этот код не запускается.Я пытаюсь создать класс сотрудника, получить к нему доступ и инициализировать объект из другого класса. Вот код класса:

class employee:

    def __init__(self):
        self.__name
        self.__num


    def employee(self):
        self.__name = "Brian"
        self.__num = 40000

    def employee(self, n ,x):
        self.__name = n
        self.__num = x

    def setName(self, n):
        self.__name = n

    def getName(self):
        return self.__name

    def setNum(self, x):
        self.__num = x

    def getNum(self):
        return self.__num

    def toString(self):
        res = "Name: " + self.__name
        res += "\nNum: " + self.__num

и вот код теста:

import Employee
def main():

    jane = Employee.employee("Jane", 40000)
    brian = Employee.employee()

    print(brian.toString())
    print(jane.toString())

main()

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Сначала прочитайте это: https://dirtsimple.org/2004/12/python-is-not-java.html

, а затем это: https://docs.python.org/3/tutorial/classes.html

Затем перепишите ваш код в Python:

# employee.py (module names should be all lower)    
class Employee(object):
    # inheriting from `object` is only useful in python2
    # but doesn't break anything in python3

    def __init__(self, name="Brian", num=4000):
        self.name = name
        self.num = num

    def __str__(self):
        # this will be automagically called when trying
        # to make a string out of an Employee
        return "Name: {self.name}\nNum: {self.num}".format(self=self)

    # and that's all. You don't need private attributes nor
    # accessors, Python has a strong support for computed 
    # attributes so you can turn plain attributes into
    # computed ones later if needed (without breaking
    # the client code of course).

и тестовый код

# test.py
from employee import Employee

def main():
    # instanciating a class is done by calling it
    jane = Employee("Jane", 40000)
    brian = Employee()

    print(jane)
    print(brian)

if __name__ == "__main__":
    main()

Я настоятельно рекомендую вам хотя бы прочитать полное руководство по Python, прежде чем пытаться писать код PHP или Java на Python, это сэкономит время каждого.

0 голосов
/ 24 августа 2018

вы пишете Python в стиле Java.См. документацию по классам

class Employee:

    # initialize constructor with default arguments
    def __init__(self, name="Brian", num=40000):
        self.name = name
        self.num = num

    # you don't need this. this is the work of "__init__" function above
    def employee(self, n ,x):
        self.__name = n
        self.__num = x

    def set_name(self, n):
        self.name = n

    def get_name(self):
        return self.name

    def set_num(self, num):
        self.num = num

    def get_num(self):
        return self.num

    # tostring equivalent
    def __str__(self):
        # string format
        return "Name: {0}\nNum: {1}".format(self.name, self.num)

Проверка кода

def main():
    # you don't need to import employee class if in the same file
    import Employee

    # creating instances
    jane = Employee("Jane", 40000)
    brian = Employee()

    print(brian)
    print(jane)


if __name__=="__main__":
    main()

распечатает

>>> Name: Brian
>>> Num: 40000
>>> Name: Jane
>>> Num: 40000
0 голосов
/ 24 августа 2018

Тебе определение класса мне не нравится.

В методе init вы ничего не назначаете атрибутам. Это должно быть как:

class employee:

    def __init__(self, name, num):
        self.name = name
        self.num = num

Кроме того, в вашем втором экземпляре отсутствуют атрибуты. Должно быть как:

brian = Employee.employee("Brian", 30.000)

Ваш метод ToString также неверен, вы не можете объединять подобные строки. Попробуйте что-то вроде:

def toString(self):
    res = "Name: {}, Num: {}".format(self.name, self.num)
    return res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...