2014-11-30 4 views
-1

파일에서 다른 파일의 클래스로 데이터를 보내고 해당 데이터를 클래스가 들어있는 다른 파일에 복사해야합니다. 파이썬 클래스 및 값

즉, 나는 다음과 같은 데이터를 요청 :

name = input("Name") 
number = input("Number") 
years = input("Years Worked") 
salary = input("salary") 
new = Staff.addEmployee(name,number,years,salary) 

는 기본적으로, 나는 staff.py라는 또 다른 파일의 클래스에있는 함수에 데이터를 보내려고합니다. 그런 다음 staff.py에 전송 된 데이터는 클래스가 초기화 될 때 만들어지는 목록에 추가해야합니다.

class Staff: 

    def __init__(self): 
     self.EmployeeList = [] 

    def addEmployee(self, name, number, YearsWorked, Salary): 
     addemployee = employee.Employee(name, number,YearsWorked, Salary) 
     addemployee.setYearsWorked(YearsWorked) 
     addemployee.setSalary(Salary) 
     addemployee.setHolidayEntitlement() 
     self.employeeList.append(addemployee) 

내가있는 클래스 직원을 호출하고, 당신은 코드에서 볼 수 있기 때문에 내가 (다른 파일이라는 employee.py에 데이터를 복사해야합니다, 결론 : 그 동안, 난 코드를 생성 . ...... 나는 다른, 파일에서 데이터를 전달하기 위해 노력하고, 다른에게있어, 일반적으로

class Employee: 

    def __init__(self, name , number , YearsWorked, Salary): 
     self._Name = Name 
     self._StaffNr = StaffNr 
     self._YearsWorked = 0 
     self._Salary = 0 
     self._HolidayEntitlement = 0 

하지만 난 할 수 없습니다 : 다른 파일은 employee.py에서, 나는 단지 다음 코드를 썼다. 고민 중입니다. 도와주세요.

+0

상속이 도움이 될 것 같아요 아니면 직원 목록을 클래스의 객체 배열로 만들 수 있습니다 직원 – freude

+0

파일과 모듈이 다른 것입니다. staff.py 모듈에서 Employee.py 모듈로 데이터를 보내고 싶습니다. 내가 맞습니까? –

+0

예,하지만 im은 값을 전달하는 목록을 작성할 수 없기 때문에 employee.py에서 혼란스러워합니다 .. staff.py에 값을 추가하는 목록이 있습니다 .. oh god : x –

답변

0

귀하의 staff.py

from employee import Employee 

class Staff: 

    def __init__(self): 
     self.EmployeeList = [] 

    def addEmployee(self, name, number, YearsWorked, Salary): 
     employee_obj = Employee(name, number, YearsWorked, Salary) 
     employee_obj.print_employee_details() 
     self.EmployeeList.append(employee_obj) 

name = input("Name") 
number = input("Number") 
years = input("Years Worked") 
salary = input("salary") 
staff_obj = Staff() 
new = staff_obj.addEmployee(name,number,years,salary) 

귀하의 employee.py는 다음과 같이 뭔가를해야만 보인다.

class Employee: 

    def __init__(self, name , number , YearsWorked, Salary): 
     self._Name = name 
     self._StaffNr = number 
     self._YearsWorked = YearsWorked 
     self._Salary = Salary 
     self._HolidayEntitlement = 0 

    def print_employee_details(self): 
     print ("Employee Name is {} working since past {} having salary {}").format(self._Name, self._YearsWorked, self._Salary) 

실행 staff.py

Name: Ana 
Number: 001 
Years Worked: 3 
salary:30000 
Employee Name is Ana working since past 3 years having salary 30000 
0

staff.py와 마찬가지로 employee.Employee(...이 필요합니다. 초기화해야합니다. 너 Staff 개체입니다. 투어 메인 파일. 또한 목록을 채우려는 경우 어떤 종류의 루프가 필요합니다.

from staff import Staff 
mystaff = Staff() 
for _ in range(100): #for 100 employees, can replace with while with a stop condition 
    name = input("Name") 
    number = input("Number") 
    years = input("Years Worked") 
    salary = input("salary") 
    mystaff.addEmployee(name,number,years,salary) 

또한이 addEmployee의 마지막 줄에 당신의 변수를 맞춤법이 틀린 점에 유의해야한다 :

self.EmployeeList.append(addemployee) 

를 그리고, 당신의 직원 생성자 YearsWorked, 급여 접수에 있다고하지만, '아무튼 그래서 같이 나타납니다 그것들을 사용하고, 그 변수 이름은 대개 파이썬에 들어 맞습니다.

0

sending data to another file의 개념은 내가 피할 것입니다. 대신,이 같은 프로그램 구조의 생각 :

  • 별도의 쓰기 별도의 파일에 클래스를 정의 (또는 그들과 관련된 짧은하는 경우, 동일한 파일에 넣을 수 있습니다) 사용자가 정의한 클래스와 상호 작용하는 파일. 이것은 당신의 메인 프로그램이 될 것, 즉 입력, 인쇄 물건, 데이터를 저장 걸립니다

    • 데이터를 저장 : 당신은 파일에 사용자 입력을 저장하고 그것을 프로그램이 시작될 때마다로드 할 수 있습니다. 어쩌면 그게 당신이 "데이터를 보내다"는 의미일까요? 이것은 아마도 데이터베이스를 통해 가장 잘 구현 될 수 있습니다. 파이썬과 함께 제공되는 데이터베이스 인 sqlite를 살펴볼 수 있습니다. 매우 간단하고 강력합니다.데이터를 텍스트 파일에 저장할 수도 있습니다 (SQL에 익숙하지 않은 경우 더 쉬울 수도 있음)
  • 프로그램을 확장하기 위해 추가 모듈을 작성하십시오 (예 : 매주 화요일마다 직원 목록 이메일을 보내십시오 "공예")

는 현재, 당신은 당신이 우리와 함께 공유 한 것으로 (두 개의 파일을)을 끝나지 않는 달의, 직원 & 두 클래스에 대한 정보를 저장 & employee.py을 staff.py 종업원. 지금까지는 훌륭합니다.

다음 단계 :

  • 직원 클래스의 addEmployee 방법은 그들이 생성자에 정의 할 때 직원 오브젝트의이 &있는 setSalary 방법을 setYearsWorked 호출합니다. 이것들은 필요하지 않은 것 같습니다. 휴가를 설정하는 방법도 여기서 중복됩니다.

  • 하면 직원 모듈 (당신이 staff.py의 시작

    수입 직원

예를 들어 staff.py에서 다음 줄이 있는지 확인 가져와야합니다 staff.py 파일 :

# staff.py 
import employee 


class Staff(object): 

    def __init__(self): 
     self.employee_list = [] 

    def add_employee(self, 
        name, 
        number, 
        years_worked, 
        salary): 

     new_emp = employee.Employee(name, 
            number, 
            years_worked, 
            salary) 
     self.employee_list.append(new_emp) 

예를 들어 employee.py :

#employee.py 
class Employee(object): 

    def __init__(self, name, number, years_worked, salary): 
     self._name = name 
     self._number = number 
     self._years_worked = years_worked 
     self._salary = salary 
     self._holiday_entitlement = 0 
  • 다음 중 일부 또는 전부를 수행 할 수있는 "main.py"파일을 만들어야합니다 (기술적으로 staff.py 또는 employee.py에서도이 작업을 수행 할 수 있지만이 작업은 새 파일의 논리는) 청소기 :

    • 어쩌면 새로운 직원을 생성하는 유저에게 입력을 요구 : 어쩌면 모든 직원
    • 인쇄 : 어쩌면
    • 특정 직원의 세부 사항 인쇄 : 허용 사용자가 직원의 세부 정보를 업데이트
    • 어쩌면 : 파일이나 데이터베이스 (고급 사용)

내가 이것에 대한 github repository을 생성에서 부하 직원 정보 : 파일이나 데이터베이스 (고급 사용)

  • 어쩌면이 직원 정보를 저장 프로젝트, 그래서 당신은 내 간단한 예제가 작동하는 방법을 확인할 수 있습니다. 당신은 디렉토리, CD를 그것을 복제하고 다음 실행할 수 있습니다, 그것을 테스트하기 위해 (참고, 예를 python2.x에서 작동하지 않습니다) : 마지막으로

    python3 main.py 
    

    , 코드 스타일에 대한 메모를. 파이썬 커뮤니티에는 코드 품질 & 형식에 대한 매우 엄격한 지침이 있습니다. 이것은 코드 가독성이 파이썬 언어의 매우 중요한 측면이기 때문입니다. 커뮤니티 표준은 pep-8으로 성문화되어 있습니다. 한번 봐주세요 :). 이것이 제가 예제 코드에서 camelCase의 변수 이름 중 일부를 under_scored로 바꾼 이유입니다.

  • +0

    나와 결혼 해 주시겠습니까? 오늘은 진짜 너 덕분이다. 당신은 얼마나 안전하고 도움이되는지 모릅니다. 이것은 대학의 교과 과정입니다. 나는 너무 감사한다! 감사! –

    +0

    하하! 고마워,하지만 난 이미 결혼했다. :) 내 아내가 이걸 쫓아 냈어! 우리는 다른 대륙에 있기 때문에 외도를 가질 수 없습니다 : P ... 이것은 숙제입니다. 직접 코드를 복사하지 마십시오. 포크로 작성하거나 복제하고 실행하는 것이 좋습니다. 사용자 상호 작용을 구현하는 다른 방법을 생각해보십시오. 아마도 argparse 및 sqlite 모듈을 살펴보아야 할 것입니다. –

    +0

    ahahah 나는 농담을하고 있었다 :) 예, 단지 코드를 기반으로 할 것이므로 어떻게 작동하는지 아이디어를 얻을 수 있으며 메소드, 함수 등을 어떻게 호출할까요? 많은 감사드립니다! :) –