zadanie na klasach w pythonie

zadanie na klasach w pythonie
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:41
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.

Kopiuj
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)
edytowany 2x, ostatnio: Riddle
KamilAdam
Musisz wkleić kod między ``` żeby coś było widać bo teraz wcięcia się totalnie rozjechały
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:4 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
1

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

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


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 2x, ostatnio: KamilAdam
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Koszalin
  • Postów:10094
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.

Zobacz pozostałe 7 komentarzy
veneficus
@Riddle: Ale gdzie tu anty-pattern?
KamilAdam
Używanie dziedziczenia zamiast kompozycji
Riddle
Tak, to jedno. Ale już pomijając to; to dziedziczenie "business card" z "base card" jest lewe. To jest ten sam antypattern, gdzie jak amatorzy mają w swojej grze klasę Fish i klasę Animal to sobie bzdurają ze klasa Fish MUSI dziedziczyć z Animal. Nie ma ku temu technicznych powodów, po prostu ludziom się wydaje że tak ma być.
Riddle
On się bierze z tego że pół mózgi mówią że dziedziczenie to "is-a relation", co jest nie prawda. Dziedziczenie to nic innego jak redeklaracja nie-abstrakcyjnych memeberów w pod-zakresie, nic więcej.
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:41
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?

KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:4 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
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ć


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:41
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:

Kopiuj
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.

edytowany 1x, ostatnio: Riddle
Riddle
Osadzaj kod w znaczniki ```py oraz ```, bo się tego nie da czytać.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Koszalin
  • Postów:10094
3
Kopiuj
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
edytowany 5x, ostatnio: Riddle
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:41
0
Riddle napisał(a):
Kopiuj
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 ?

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Koszalin
  • Postów:10094
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.

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:41
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.

Kopiuj
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:

Kopiuj
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()
edytowany 1x, ostatnio: Riddle
ledi12
  • Rejestracja:prawie 6 lat
  • Ostatnio:2 miesiące
  • Lokalizacja:Wrocław
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.

Kopiuj
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__


Robię http response status cody w martwych ciągach
edytowany 1x, ostatnio: ledi12
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:41
0

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

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Koszalin
  • Postów:10094
0
dawid584 napisał(a):
Kopiuj
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:

Kopiuj
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().

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:41
0
Riddle napisał(a):
dawid584 napisał(a):
Kopiuj
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:

Kopiuj
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.

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Koszalin
  • Postów:10094
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().

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 2 lata
  • Postów:41
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()

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.