zadanie na klasach w pythonie

0

Cześć ,

mam zadanie do wykonania:

Używając dziedziczenia, rozdziel podstawową klasę wizytówki na dwie osobne: pierwsza (BaseContact) powinna przechowywać podstawowe dane kontaktowe takie jak imię, nazwisko, telefon, adres e-mail. Za pomocą kolejnej klasy (BusinessContact) rozszerz klasę bazową o przechowywanie informacji związanych z pracą danej osoby – stanowisko, nazwa firmy, telefon służbowy.
Oba typy wizytówek, powinny oferować metodę contact(), która wyświetli na konsoli komunikat w postaci “Wybieram numer +48 123456789 i dzwonię do Jan Kowalski”. Wizytówka firmowa powinna wybierać służbowy numer telefonu, a wizytówka bazowa prywatny.
Oba typy wizytówek powinny mieć dynamiczny atrybut label_length, który zwraca długość imienia i nazwiska danej osoby.
Stwórz funkcję create_contacts, która będzie potrafiła komponować losowe wizytówki. Niech ta funkcja przyjmuje dwa parametry: rodzaj wizytówki oraz ilość. Wykorzystaj bibliotekę faker do generowania danych.

Mam ogólnie problem próbowałem to pisać , ale mam problem z napisaniem tego , czy mógłby ktoś mi to poprawić ? Bo męczę się z tym długi czas.

import email
from posixpath import supports_unicode_filenames
from typing_extensions import Self
from unicodedata import name
from faker import Faker
fake = Faker(['th_TH', 'pl_PL'])

card =""
xc =""
data_1=""
n = 0

n = int(input('wpisz'))

class  BaseContact:
    
    def __init__(self , name  , telephone_number , email ):
        self.name = name
        self.telephone_number = telephone_number
        self.email = email
    
    def contact(): 
       print(f'Wybieram numer +48 {lista_of_contacts[0]} i dzwonię do {lista_of_contacts[1]}') 
       print(f'Wybieram numer służbowy +48 {lista_of_contacts[2]} i dzwonię do {lista_of_contacts[0]}')  


class BusinessContact(BaseContact):
    def __init__(self , company_position , company_name , company_number , *args, **kwargs):
       super().__init__(*args, **kwargs)
       self.company_position = company_position
       self.company_name = company_name
       self.company_number = company_number
       
def fake_contact(BusinessContact):

        company_position = fake.job()
        company_name = fake.company()
        email = fake.email()
        name = fake.name()
        company_number = fake.msisdn()[3:]
        telephone_number = fake.msisdn()[3:]

        lista_of_contacts = []
        for i in range(n):
            card = BusinessContact()
            lista_of_contacts.append(name , telephone_number , company_number , company_position , email ,company_name)

        
        return lista_of_contacts

xc.contact()
xc = BaseContact(name , telephone_number , email)
1

czy mógłby ktoś mi to poprawić

A co konkretnie chciałbyś żeby ci poprawić? Co konkretnie nie działa?

0

To zadanie nie ma sensu całkowicie.

Równie dobrze ktoś mógłby zadań zadanie: pomaluj ścianę używając krzesła i piły spalinowej.

0
KamilAdam napisał(a):

czy mógłby ktoś mi to poprawić

A co konkretnie chciałbyś żeby ci poprawić? Co konkretnie nie działa?

Bo zrobiłem najpierw jedną klase według zadania z danymi prywatnymi potem druga klase z danymi biznesowymi. Potem mam zrobić funkcje która zwraca losowe dane funkcja faker. I zrobiłem by to dodało do listy i potem ma zwrócić dane z funkcji i te dane ma przypisać do metody contact() .

Jak przypisać dane z funkcji do metod w klasach bo jak robię np. xc = (nazwa klasy)("sdss" , "dsds") itp. i potem wywołanie xc.contact() to działa , ale jak mam zwrócone dane w postaci zmiennej np. xc = (nazwa klasy)(zmienna_1, zmienna_2 itp.) i potem xc.contact() to w tej sytuacji to nie działa . Czy da się przypisywac jakoś zmienne zwórcone przez funkcje do jakiejs metody w klasie?

A co do mojego zadania to w tej funkcji create_contact jest jakiś błąc i potem z przypisaniem tego do metody contact w pierwszej klasie basecontact ,mam nadzieję , że zrozumiale wyjsniłem o co mi chodzi teraz?

0
dawid584 napisał(a):
KamilAdam napisał(a):

czy mógłby ktoś mi to poprawić

A co konkretnie chciałbyś żeby ci poprawić? Co konkretnie nie działa?

Bo zrobiłem najpierw jedną klase według zadania z danymi prywatnymi potem druga klase z danymi biznesowymi. Potem mam zrobić funkcje która zwraca losowe dane funkcja faker. I zrobiłem by to dodało do listy i potem ma zwrócić dane z funkcji i te dane ma przypisać do metody contact() .

Nie opisuj co robi twój kod. To jest o wiele gorsze niż czytanie go

Jak przypisać dane z funkcji do metod w klasach bo jak robię np. xc = (nazwa klasy)("sdss" , "dsds") itp. i potem wywołanie xc.contact() to działa , ale jak mam zwrócone dane w postaci zmiennej np. xc = (nazwa klasy)(zmienna_1, zmienna_2 itp.) i potem xc.contact() to w tej sytuacji to nie działa . Czy da się przypisywac jakoś zmienne zwórcone przez funkcje do jakiejs metody w klasie?

Sorry, nic nie rozumiem. W sensie że wywołujesz konstruktor klasy i czasem działa, a czasem nie działa?

A co do mojego zadania to w tej funkcji create_contact jest jakiś błąc i potem z przypisaniem tego do metody contact w pierwszej klasie basecontact ,mam nadzieję , że zrozumiale wyjsniłem o co mi chodzi teraz?

Może jest błąd, może nie ma. Kodu create_contact nie dałeś wiec o tym cięzko się wypowiedzieć

0
KamilAdam napisał(a):

Sorry, nic nie rozumiem. W sensie że wywołujesz konstruktor klasy i czasem działa, a czasem nie działa?

dam przykład jest:

class car:
  def kot:
    print (f"{x}  , {y}")

potem jest jakaś funkcja poza klasą która ma return i zwraca zmienną x , y

no i jak chcę uruchomić tą metodę powyżej kot to nie mogę zrobić kot() , ale muszę najpierw zrobić jakąś zmienną np. r = car( dane ) no i wywołanie tej metody r.kot().

Bo jak w piszę np. r = car("słoń " , "LEW") to bez problemu to się przypisuje i meotda wyśiwtla to co chcę , ale jak wpiszę zwrócone zmienne np. r =car( x , y ) , i potem r.kot() to mi wyświetli błędy.
Jak przypisać zwrócone zmienne przez funkcję do metody w klasie ?

Od nie dawna uczę się programowac , więc nie wszystko jeszcze dobrze rozumiem.

3
from faker import Faker

class BaseContact:
    def __init__(self , name, phone, email):
        self.name = name
        self.phone = phone
        self.email = email

    @property
    def label_length(self):
      return len(self.name)

    def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 

class BusinessContact(BaseContact):
    def __init__(self, name, phone, email, company_position, company_name, company_number):
       super().__init__(name, phone, email)
       self.company_position = company_position
       self.company_name = company_name
       self.company_number = company_number
       
     def contact(self): 
       print(f'Wybieram numer służbowy +48 {self.phone} i dzwonię do {self.name}')  



def fake_contacts(is_business, amount):
    fake = Faker(['th_TH', 'pl_PL'])
    company_position = fake.job()
    company_name = fake.company()
    email = fake.email()
    name = fake.name()
    company_number = fake.msisdn()[3:]
    telephone_number = fake.msisdn()[3:]

    lista_of_contacts = []
    for i in range(amount):
        if is_business:
          card = BusinessContact(name, telephone_number, email, company_number, company_position, company_name)
        else:
          card = BaseContact(name, telephone_number, email)
        lista_of_contacts.append(card)

    return lista_of_contacts




n = int(input('wpisz'))

fake_contacts(True, n) # biznesowe kontakty
fake_contacts(False, n) # normalne kontakty
0
Riddle napisał(a):
from faker import Faker

class BaseContact:
    def __init__(self , name, phone, email):
        self.name = name
        self.phone = phone
        self.email = email

    @property
    def label_length(self):
      return len(self.name)

    def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 

class BusinessContact(BaseContact):
    def __init__(self, name, phone, email, company_position, company_name, company_number):
       super().__init__(name, phone, email)
       self.company_position = company_position
       self.company_name = company_name
       self.company_number = company_number
       
     def contact(self): 
       print(f'Wybieram numer służbowy +48 {self.phone} i dzwonię do {self.name}')  



def fake_contacts(is_business, amount):
    fake = Faker(['th_TH', 'pl_PL'])
    company_position = fake.job()
    company_name = fake.company()
    email = fake.email()
    name = fake.name()
    company_number = fake.msisdn()[3:]
    telephone_number = fake.msisdn()[3:]

    lista_of_contacts = []
    for i in range(amount):
        if is_business:
          card = BusinessContact(name, telephone_number, email, company_number, company_position, company_name)
        else:
          card = BaseContact(name, telephone_number, email)
        lista_of_contacts.append(card)

    return lista_of_contacts




n = int(input('wpisz'))

fake_contacts(True, n) # biznesowe kontakty
fake_contacts(False, n) # normalne kontakty

Powiedz mi tylko jedną rzecz jak zrobić by się te printy wyświetlały teraz , bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

0
dawid584 napisał(a):

Powiedz mi tylko jedną rzecz jak zrobić by się te printy wyświetlały teraz , bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

Sprzedam Ci mroczny sekret, którego nie uczą w szkołach.

bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

Dopóki nie napiszesz jaki błąd, to nikt, ale to nikt się nie domyśli o co chodzi.

Wklei błąd który masz.

0
Riddle napisał(a):
dawid584 napisał(a):

Powiedz mi tylko jedną rzecz jak zrobić by się te printy wyświetlały teraz , bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

Sprzedam Ci mroczny sekret, którego nie uczą w szkołach.

bo w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ?

Dopóki nie napiszesz jaki błąd, to nikt, ale to nikt się nie domyśli o co chodzi.

Wklei błąd który masz.

File "c:\Kodilla\learning-git-6\Untitled-1.py", line 10, in <module>
    class BaseContact:
  File "c:\Kodilla\learning-git-6\Untitled-1.py", line 25, in BaseContact
    contact()
TypeError: BaseContact.contact() missing 1 required positional argument: 'self'

A dodałem contact() jak poniżej , do uruchamiania tej metody:

def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 
       print(f'Wizytówka prywatna {self.name} , +48{self.phone} , {self.email}')
       contact()
47

w klasie nie moge przy metodzie zrobić contact() bo mi pokazuje błąd ? Pisz Pan po polsku :P

To co próbujesz zrobić przypomina wywołanie metody statycznej, ale ta metoda nie jest statyczna - Obiekt musi zostać najpierw zainicjalizowany.

fake_contacts Zwraca Ci listę obiektów typu BaseContact. Zwyczajnie wywołaj sobie tą funkcje np podczas iteracji po każdym obiekcie, albo po konkretnym indexie.

for card in fake_contacts:
  card.contact()

A jeśli w przypadku BusinessContact chcesz wywołać metodę rodzica o tej samej nazwie to robisz to za pomocą super() - identycznie jak przy wywoałniu ___init__

0

jak teraz zrobić by mi się wyświetlały printy z tego def contact() ?

0
dawid584 napisał(a):
File "c:\Kodilla\learning-git-6\Untitled-1.py", line 10, in <module>
    class BaseContact:
  File "c:\Kodilla\learning-git-6\Untitled-1.py", line 25, in BaseContact
    contact()
TypeError: BaseContact.contact() missing 1 required positional argument: 'self'

A dodałem contact() jak poniżej , do uruchamiania tej metody:

def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 
       print(f'Wizytówka prywatna {self.name} , +48{self.phone} , {self.email}')
       contact()

Powinieneś zrobić self.contact().

0
Riddle napisał(a):
dawid584 napisał(a):
File "c:\Kodilla\learning-git-6\Untitled-1.py", line 10, in <module>
    class BaseContact:
  File "c:\Kodilla\learning-git-6\Untitled-1.py", line 25, in BaseContact
    contact()
TypeError: BaseContact.contact() missing 1 required positional argument: 'self'

A dodałem contact() jak poniżej , do uruchamiania tej metody:

def contact(self): 
       print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}') 
       print(f'Wizytówka prywatna {self.name} , +48{self.phone} , {self.email}')
       contact()

Powinieneś zrobić self.contact().

Ok.

zrobiłem

def contact(self):
print(f'Wybieram numer +48 {self.phone} i dzwonię do {self.name}')
print(f'Wizytówka prywatna {self.name} , +48{self.phone} , {self.email}')
self.contact()

No i pisze wpisz liczbe podaje np. 8 i pote jest nadal nic , jak zrobię bez wcięcia to podaje że self jest nie zdefiniowane.

1
dawid584 napisał(a):

No i pisze wpisz liczbe podaje np. 8 i pote jest nadal nic , jak zrobię bez wcięcia to podaje że self jest nie zdefiniowane.

No bo nie wołasz funkcji .contact().

0
Riddle napisał(a):
dawid584 napisał(a):

No i pisze wpisz liczbe podaje np. 8 i pote jest nadal nic , jak zrobię bez wcięcia to podaje że self jest nie zdefiniowane.

No bo nie wołasz funkcji .contact().

Jak nie wołam funkcji ? Nie rozumiem. Wpisałem self.contact()

1 użytkowników online, w tym zalogowanych: 0, gości: 1