Declarando un método constructor en Python

25/37

Lectura

En Python encontrarás un concepto denominado Métodos Mágicos, estos métodos son llamados automática y estrictamente bajo ciertas reglas. El método constructor en Python forma parte de esta familia de métodos y como aprendimos en la clase anterior lo declaramos usando __init__, aunque si nos ponemos estrictos este método no construye el objeto en sí. El encargado de hacer esto es __new__ y el método __init__ se encargará de personalizar la instanciación de la clase, esto significa que lo que esté dentro de __init__ será lo primero que se ejecute cuando se cree un objeto de esta clase.

Para nuestro proyecto tenemos la necesidad de que algunas variables se inicialicen obligatoriamente cuando ocurra la instanciación. Así que declaremos el método __init__ en las clases de nuestro proyecto con las propiedades obligatorias.

Para la clase Account quedaría algo así, notarás que usamos la palabra clave self, esta es muy parecida a lo que venimos trabajando a otros lenguajes con this. Y como su nombre lo dice hace referencia a los datos que componen la clase, en este caso self.name está llamando al atributo name que se encuentra en la línea 3 de la clase y, le está asignando el dato que se pasa en el método __init__ de la línea 8.

Captura de pantalla 2019-01-21 a la(s) 1.16.43.png

Ahora veamos la clase Car:

imagen.png

Lo que notarás de diferente es que cambiamos el tipo de dato de driver, ahora es de tipo Account y como ves está solicitando los dos datos obligatorios para instanciar un objeto de este tipo. Esto lo verás más en acción en el próximo fragmento de código del archivo main.py. Además, mucho ojo, en la primera línea observamos que es importante importar la clase para poderla usar.

Nuestro archivo main.py ahora se verá así:

Captura de pantalla 2019-01-21 a la(s) 1.17.11.png

Observa que estamos importando las dos clases que usaremos y las estamos instanciando en los métodos constructores.

Los resultados serán los siguientes:

Captura de pantalla 2019-01-21 a la(s) 1.14.06.png

El código de este ejemplo lo encuentras en este enlace:
https://github.com/anncode1/Curso-POO-Platzi/tree/3.2.ConstructorPython

Reto 3.

Ahora que ya viste cómo creamos un método constructor en Python, mira esta clase https://platzi.com/clases/2034-php-poo/32133-polimorfismo/ y hazlo también para PHP. Compártenos tus resultados en la sección de discusiones.

Aportes 326

Preguntas 14

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Account.php

<?php

class Account {
  public $id;
  public $name;
  public $document;
  public $email;
  public $password;

  public function __construct($name, $document) {
    $this->name = $name;
    $this->document = $document;
  }
}

Car.php

<?php

class Car {
  public $id;
  public $license;
  public $driver;
  public $passengers;

  public function __construct($license, $driver) {
    $this->license = $license;
    $this->driver = $driver;
  }

  public function PrintDataCar(){
    echo "license: $this->license, conductor: {$this->driver->name}, document: {$this->driver->document}";
  }
}

index.php

<?php

require_once('Car.php');
require_once('Account.php');

$car = new Car("AW456", new Account("Andres Herrera", "AMS123"));
$car->printDataCar();

++ ATENCIÓN ++: Si VSC les marca un error ‘unresolved import’:


AQUI ESTA LA MANERA QUE LO RESOLVI:
El problem empezó después de hacer enable una extension. Para arreglarlo, encuentren settings.json en su proyecto. El mío estaba en Projects > .vscode > settings.json

Ahora cambien “python.jediEnabled” de false a true :

guarden los cambios y refresquen la ventana.

Y listo! Los errores de “unresolved import” ya no estarán 😃

Tal vez les salga algunas notificaciones para instalar extensiones. Yo no las instale!

Espero que esto ayude algunos de ustedes que enfrentaron este problema.

Completando el codigo en PHP:

Clase Index.php
require_once ‘Car.php’;

Clase Account

Clase Car
require_once ‘Account.php’;

Ejemplo de uso clases: Car, Account en Index que tambien es una clase:

También aplicado a c++

Es extraño que le halla funcionado a alguien si hay que instalar y arrancar un simulador de servidor php, parece que nadie a comentado esto y sin embargo muchos hicieron el reto, pero por eso no muestran el resultado, no lo pudieron correr.
yo trate de activar el servidor de VCS, medio lo hice ya arranca apache pero no carga la pagina y no encontré mucha info de esto.
lo que hago es con xampp pasar la carpeta a donde se colocan los proyectos del servidor y no correrlos desde VSC si no del explorador, pero tampoco es así nomas,
hay que configurar los puertos de la compu, y cuando arranca el servidor, buscar el archivo desde el explorador de internet, partiendo del localhost:“puerto que activamos”/“index de nuestro proyecto”.
Servidor:

Proyecto index.php:

El servidor por defecto busca el archivo index.(html/php) y ese es el inicio de la pagina.

Me salio costoso este reto 😃 en tiempo…

Alguien más tuvo este problema con Python: “Import “account” could not be resolvedPylance (reportMissingImports)” . No he podido resolverlo =(

🐱‍💻 Utilice el lenguaje Dart para declarar constructores.

class Account {
  int id;
  String name;
  String document;
  String email;
  String password;

  Account({this.name, this.document});
}
import 'account.dart';

class Car {
    int id;
    String license;
    Account driver;
    int passenger;

    Car({this.license, this.driver});

    void printDataCar(){
      print('License: $license Driver: ${driver.name}');
    }
} 
import 'account.dart';
import 'car.dart';

void main() {
	print('Hello World!');
  Car car = Car(license: 'AMS234', driver: Account(name:  'Andres Herrera', document: 'ANDA876'));
  car.passenger = 4;
  car.printDataCar();
}
<h3>Python</h3> <h4>car. py</h4>
from account import Account

class Car:
    id          = int
    license     = str
    driver      = Account("","")
    passengers  = int

    def __init__(self, license, driver):
        self.license = license
        self.driver = driver
<h4>account. py</h4>
class Account:
    id          = int
    name        = str
    document    = str
    email       = str
    password    = str

    def __init__(self, name, document):
       self.name = name
       self.document = document 
<h4>main. py</h4>
from car import Car
from account import Account

if __name__ == "__main__":
    print("Hola Mundo")
    car = Car("GHD234", Account("Gustavo Alonso", "DFE214"))
    print(vars(car))
    print(vars(car.driver))

    car2 = Car("FTY344", Account("Rodrigo Pérez", "GHXV23452"))
    print(vars(car2))
    print(vars(car2.driver))
<h3>PHP</h3> <h4>Car.php</h4>
<?php
require_once 'Account.php';

    class Car 
    {
        public $id;
        public $license;
        public $driver;
        public $passenger;
        
        function __construct($license, Account $driver){
            $this->license = $license;
            $this->driver = $driver;
        }
        
        function printDataCar(){
            echo 
            "License: ".$this->license. 
            " Driver: ".$this->driver->name.
            " Document: ".$this->driver->document;
        }
    }

?>
<h4>Account.php</h4>
<?php
    class Account 
    {
        public $id;
        public $name;
        public $document;
        public $email;
        public $password;
        
        function __construct($name, $document){
            $this->name = $name;
            $this->document = $document;
        }
    }
?>
<h4>Index.php</h4>
<?php
    require_once 'Car.php';
    require_once 'Account.php';

	$car = new Car('GHT343', new Account('Alfredo del Mazo', 'TRG43'));
    $car->printDataCar();
?>

En mi caso use ´str´ en lugar de las comillas para definir la variables global driver en la clase Account.

driver     = Account(str,str)

voy con python 3.10 seguro que hay hasta opciones más nuevas.

METODOS MAGICOS


Son aquellos que se llaman de manera automatica sin necesidad de que tu lo hagas explicitamente.
En Python estos se caracterizan por tener su nombre entre guión bajo doble:
__ init __
__ str __
__ new __
y puedes verlos con la función dir().
Hay un articulo muy interesante donde aprendes a sobreescribirlos y darlse otra funcionalidad.
https://www.tutorialsteacher.com/python/magic-methods-in-python

¿Como compilo el php para ver que lo hice bien?

Para Python recomiendo esta referencia
no se como funciona en otros lenguajes pero en python se trabaja el concepto de variables de instancia y variables de clase cuando asignamos self.license realmente lo que estamos haciendo es sobreescribir este valor en el contexto de la instancia creada.
Es todo un tema que pueden ver en el link

Reto cumplido:

El resultado:

Acá mi solución:

Clase Account:

<?php

class Account
{
    private $id;
    private $name;
    private $document;
    private $email;
    private $password;

    public function __construct($name, $document)
    {
        $this->name = $name;
        $this->document = $document;
    }
}

Clase Car:

<?php

require_once 'Account.php';

class Car 
{
    private $id;
    private $license;
    private $driver;
    private $passenger;

    public function __construct($license, Account $driver)
    {
        $this->license = $license;
        $this->driver = $driver;
    }

    public function License()
    {
        return $this->license;
    }

    public function Driver()
    {
        return $this->driver;
    }
}

Clase Main:

<?php

require_once 'Account.php';
require_once 'Car.php';

$car = new Car("L123", new Account("Peter", "ANDA876"));

echo "<pre>";
var_dump( $car->License() );
var_dump( $car->Driver() );

CLASE ACCOUNT:

CLASE CAR:

CLASE MAIN:

RESULTADO:

Alguna ayuda? no me funciona y no se que estoy haciendo mal
.
car .py

from account import Account

class Car:
    id = int
    license = str
    driver = Account("","")
    passegenger = int 

def __init__(self, license, driver):
    self.license = license
    self.driver = driver

account .py

class Account:
    id         = int        
    name       = str
    document   = str     
    email      = str 
    password   = str     

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

main .py

from car import Car
from account import Account

if __name__ == "__main__":
    print("Hola mundo")
    car = Car("AD111WM",Account("Nombre","ABD123"))
    print(vars(car))
    print(vars(car.driver))

Errores !!

C:\Users\Pandora\Desktop\CursoPOOUber\Python>python main.py
Traceback (most recent call last):
  File "C:\Users\Pandora\Desktop\CursoPOOUber\Python\main.py", line 1, in <module>
    from car import Car
  File "C:\Users\Pandora\Desktop\CursoPOOUber\Python\car.py", line 3, in <module>
    class Car:
  File "C:\Users\Pandora\Desktop\CursoPOOUber\Python\car.py", line 6, in Car
    driver = Account("","")


<?php
class Car{
    public $id;
    public $license;
    public $driver;
    public $passenger;
    
    public function __construct($driver,$license){
        $this->license=$license;
        $this->driver=$driver;
    }

    public function PrintDataCar(){
        echo "license is: ".$this->license.", the conductor is: ". $this->driver->name.
        "and the document is: ". $this->driver->document;
    }
}
?>
<?php
class Account{
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;


    public function __construct($name,$document){
        $this->name = $name;
        $this->document = $document;
    }
}
?>
<?php
require_once("car.php");
require_once("account.php");
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <h1>Practica de POO en PHP</h1>
    <?php
    $car = new Car(new Account("jonathan vera", "KDJ123"),123543);
    $car->PrintDataCar();
    echo "<h1>holas</h1>";
    ?>
</body>
</html>```

CODIGO en index.php

<?php
include("Account.php");
include("Car.php");
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Desarrollo con PHP</title>
</head>
<body>
    <?php
    $car = new Car("APE768", "GRIS", "Jorge Margarito");
    echo $car->mostrarInformacion();

    $car2 = new Car("ACM145", "VERDE", "Marie Morales");
    echo $car2->mostrarInformacion();

    $car3 = new Car("MPH457", "ROJO", "Beatriz Florian");
    echo $car3->mostrarInformacion();
    ?>
</body>
</html>

CODIGO en Car.php

<?php

class Car{
    public $id;
    public $license;
    public $color;
    public $driver;
    public $passengers;

    public function __construct($license, $color, $driver){
        $this->license = $license;
        $this->color = $color;
        $this->driver = $driver;
    }

    public function mostrarInformacion(){
        echo "<h4>Informacion del auto:</h4>";
        echo "<br/> Licencia: " . $this->license;
        echo "<br/> Color: " . $this->color;
        echo "<br/> Driver: " . $this->driver;
    }
}

?>

AL IMPRIMIR:

Informacion del coche:

Licencia: APE768
Color: GRIS
Driver: Jorge Margarito

Informacion del coche:

Licencia: ACM145
Color: VERDE
Driver: Marie Morales

Informacion del coche:

Licencia: MPH457
Color: ROJO
Driver: Beatriz Florian

Mi solución al reto:

index.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>POO en PHP</title>
</head>
<body>
    
    <?php
    include("Car.php");
    include("Account.php");    

    $car = new Car("ABC123",new Account("Juan Carmona", "INE345678"));
    $car->printDataCar();
    ?>

</body>
</html>

Car.php

<?php

class Car
{
    private $id;
    public $license;
    public $driver;
    public $passenger;

    public function __construct($license, $driver)
    {
        $this->license = $license;
        $this->driver = $driver;
    }

    public function printDataCar() {
        echo "License: " . $this->license . " Driver: " . $this->driver->name;
    }

}

Account.php

<?php

class Account
{
    private $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct($name, $document)
    {
        $this->name = $name;
        $this->document = $document;
    }
}

Este es el código del reto

Account

<?php
class Account {
  public $id;
  public $document;
  public $name;
  public $email;
  public $password;
  public function __construct($name, $document) {
    $this->name = $name;
    $this->document = $document;
  }
}
?>

Car

<?php
class Car {
  public $id;
  public $license;
  public $driver;
  public $passengers;
  public function __construct($license, $driver) {
    $this->license = $license;
    $this->driver = $driver;
  }
  public function print_data_car() {
    print "License: $this->license, Name: $this->driver->name, Document: $this->driver->document";
  }
}
?>

No sé cómo hacer la función de imprimir 😪😪

Sobre el parametro Self:

Las métodos que se crean en las clases en python tienen como primer argumento SELF , para comprender el sentido que python otorga a este argumento debe conocerse lo que son los métodos atados.

  • Método atado : Un método se dice atado si se encuentra asociado con una instancia de clase. (los métodos que tomen el parámetro self en una clase, son atados.)
  • Self: La atadura o vínculo se logra por medio de Self que representa a la instancia creada a partir de la clase y proporciona acceso a todos sus atributos.

Genial, solo que en php no e entendido a su totalidad :C

PHP 7.3
Recuerda importar en index las calses Car y Account, también importar account.php dentro de la clase car.php y dentro del contructor de car especificar que la variable driver sera de tipo Account

Account.php

<?php
class Account{
    public $id;
    public $name;
    public $docuement;
    public $email;
    public $password;

    public function __construct($name, $docuement){
        $this->name= $name;
        $this->document= $docuement;
    }
}
?>

car.php

<?php

include_once "account.php";

class Car{
    public $id;
    public $license;
    public $driver;
    public $passangers;

    public function __construct($license, Account $driver){
        $this->license = $license;
        $this->driver = $driver;
    }

    public function setPassangers($num){
        $this->passangers = $num;
    }

    public function prinDataCar(){
        echo "License: $this->license <br>Driver: ".$this->driver->name ."<br>Passengers: $this->passangers";
    }
}

?>

index.php

<!DOCTYPE html>

<?php
    include "account.php";
    include "car.php";
?>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>PHP</title>
</head>
<body>

    <h1>POO con PHP</h1>

    <?php
        $car = new Car("Lincense1", new Account("Ana Laura.", "INE"));
        $car->setPassangers(4);

        echo("<p>");
            $car->prinDataCar();
        echo("</p>");
    ?>
    
</body>
</html>

Account.php

`

<?php 

class Account {
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct($name, $document) {
        $this->name = $name;
        $this->document = $document;
    }

}
?>

`

Car.php

`

<?php
class Car {
    public $id;
    public $license;
    public $driver;
    public $passengers;

    public function __construct($license, $driver) {
        $this->license = $license;
        $this->dirver = $driver;
    }
}
?>

`

index.php

`

<?php
include('Car.php');
include('Account.php');
$car = new Car("AMX123",new Account("Paul Cortes","123456"));

echo json_encode($car);

?>

`

Account.php

<?php

class Account
{
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct($name, $document)
    {
        $this->name = $name;
        $this->document = $document;
    }
}

?>

Car.php

<?php
    require_once 'Account.php';
    class Car
    {
        public $id;
        public $license;
        public $driver;
        public $passenger;
    

        public function __construct($license, $driver)
        {
            $this->license = $license;
            $this->driver = $driver;
        }

        public function printDataCar()
        {
            echo '<p> License: ' . $this->license . "</p>";
            echo '<p> Driver Name: ' . $this->driver->name . '</p>';

        }
    }
?>

index.php

<?php

    require_once 'Account.php';
    require_once 'Car.php';

    $car = new Car("AMS234", new Account("Andres Herrera", "AND123"));
    $car->printDataCar();

    $car2 = new Car("QWE567", new Account("Andrea Herrera", "ANDA567"));
    $car2->printDataCar();

?>

index.php (Main)

<?php
require 'Account.php';
require 'Car.php';

$car = new Car("AMS234", new Account("Andres Herrera", "ANDA876"));

print_r ($car);
print_r ($car->driver);


?>

Account.php

<?php 
class Account{
   public $id;
   public $name;
   public $document;
   public $email;
   public $password;
   
   public function __construct ($name, $document){
      $this->name = $name;
      $this->document = $document;
   }

}

?>

Car.php

<?php 
class Car{
   public $id;
   public $license;
   public $driver;
   public $passenger;

   public function __construct($license, $driver){
      $this->license = $license;
      $this->driver = $driver;
   }
}

?>

//Archivo Car.php
<?php
Class Car{
public $id;
public $license;
public $driver;
public $passenger;

    public function __construct($license, $driver){
        $this->license=$license;
        $this->driver=$driver;
    }

    public function imprimir(){
        echo "la Licencia es: ".$this->license." El conductor es: ".$this->driver->name;
    }
}

?>

//Archivo Account.php
<?php
class Account{
public $id;
public $name;
public $document;
public $email;
public $password;

    public function __construct($name, $document){
        $this->name=$name;
        $this->document=$document;
    }
}

?>

//Archivo index.php
<?php
require_once ‘Account.php’;
require_once ‘Car.php’;

$prueba = new Car('QLX311', new Account('Loro', '783DNI'));
$prueba->imprimir();

?>

La verdad es que no me interesa aprender PHP sino Python. Acá mi código Python:

from car import Car
from account import Account

if __name__=="__main__":
    car = Car("AMS2233", Account("Carlos Martinez", 882450))
    print(vars(car))
    print(vars(car.driver))

Acá el resultado del código:

Estuvo pesado lo de PHP al final pude

  1. Abrir C:\xampp -> El xampp-control.exe
  2. Poner Start en Apache & MySQL
  3. En seguida mover la carpeta PHP en: C:\xampp\htdocs\PHP
  4. Abrir el navegador y poner: http: // localhost /PHP/
  5. Y poner el siguiente código
Car.php - Este es el nombre de la archivo

<?php

require_once 'Account.php';

class Car {
  public $id;
  public $license;
  public $driver;
  public $passenger;  

  public function __construct($license, Account $driver) {
    $this ->license = $license;
    $this ->driver = $driver;
  }

  public function printDataCar() {
    echo "License: ". $this->license .", Driver: ". $this->driver->name;
  }

}

?>
Account.php - Este es el nombre de la archivo

<?php

class Account {
  public $id;
  public $name;
  public $document;
  public $email;
  public $password;

  public function __construct($name, $document) {
    $this ->name = $name;
    $this ->document = $document;
  }

}

?>
index.php - Este es el nombre de la archivo

<h2> Hola Platzi :D </h2>

<?php

require_once 'Car.php';
require_once 'Account.php';

echo "<h1>"."Hola mundo"."</h1>";

$car = new Car("WER987", new Account("Andres Herrera", "WEF951"));
$car->printDataCar();

?>

Tengo todo el código bien pero me sale:
ImportError: cannot import name ‘Account’ from 'account’
no sé por qué, ya lo revisé mil veces y lo tengo igual 😦

En VSC molesta que Pylance arroje una advertencia cuando queremos importar un módulo mencionando solo el nombre del archivo.
Lo solucioné deshabilitando la extensión Pylance.

Dejaré PHP pendiente porque me estoy confundiendo. Sin embargo, sí estoy entendiendo los conceptos de POO en los demás lenguajes.

<?php
    class Car {
        public $id;
        public $license;
        public $driver;
        public $passenger;
    }

    public function __construct($license, $driver){
        $this->license = $license;
        $this->driver = $driver;
    }

    public function printDataCar(){
        echo 
        "License: " . $this->license . 
        " Driver: " . $this->driver->name . 
        " Document: " . $this->driver->document;
    }
?>
<?php
    class Account {
        public $id;
        public $name;
        public $document;
        public $email;
        public $password;
    }

    public function __construct ($name, $document){
         $this->name = $name;
         $this->document = $document;
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php
    require_once("Car.php");
    require_once("Account.php");

    $car = new Car("324522490", new Account("Monica", "3245254311"));
    $car->printDataCar();
    ?>
</body>
</html>

Account.php

<?php
    class Account 
    {
        public $id;
        public $name;
        public $document;
        public $email;
        public $password;

        public function __construct($name, $document){
            $this->name     = $name;
            $this->document = $document;
        }
    }
?>

Car.php

<?php
    class Car 
    {
        public $id;
        public $license;
        public $driver;
        public $passenger;

        public function __construct($license,Account $driver){
            $this->license = $license;
            $this->driver  = $driver;
        }
        
        public function printDataCar(){
            echo "License: ".$this->license;
            echo "Driver: ".$this->driver->name;
        }
    }
?>

Metodo constructor en PHP

Este es el editor que use (tiene soporte para varios lenguajes):
https://carbon.now.sh/

  • Class Account:
<?php

class Account
{
    /* attributes */
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;
    /* methods */
    public function __construct($name, $doc)
    {
        $this->name = $name;
        $this->document = $doc;
    }
}

?>
  • Class Car:
<?php
require_once("Account.php");

class Car
{
    /* attributes */
    public $id;
    public $license;
    public $driver;
    public $passenger;
    /* methods */
    public function __construct($license, Account $driver)
    {
        $this->license = $license;
        $this->driver = $driver;
    }

    public function printDataCar()
    {
        echo 
        "License: ".$this->license. 
        " Driver: ".$this->driver->name.
        " Document: ".$this->driver->document;
    }
}

?>
  • Example:
<?php
require_once("Car.php");
require_once("Account.php");

$car = new Car("SDL123", new Account("Paco", "111111111"));
$car->printDataCar();
?>
  • Output:
License: SDL123 Driver: Paco Document: 111111111

Account

<?php
    class Account {
        public $id;
        public $name;
        public $document;
        public $email;
        public $password;

        public function __constructor($name, $driver){
            $this->name = $name;
            $this->driver = $driver; 
        }
    }
?>

Car

<?php
    class Car {
        public $id;
        public $license;
        public $driver;
        public $passenger;

        public function __constructor($license, $driver){
            $this->license = $license;
            $this->driver = $driver;
        }

        public function printDataCar(){
            echo 'License: ' .$this->license . ' Name Driver: ' . $this->driver->name;
        }
    }
?>

index

<?php
require_once('Car.php');
require_once('Account.php');
$car = new Car('AWD123', new Account('Andres Herrera', 'AMS123'));
$car->printDataCar();
?>

Hola! Si alguién sabe como llamar una variable de un archivo a otro me cuentan por favor. Muchas gracias!

Index.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>POO PHP</title>
</head>
<body>

</body>
</html>

<?php
include 'car.php';
include 'account.php';

echo $account->userGreet();
echo $car->printDataCar();

account.php

<?php
class Account {
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }


    public function userGreet() {
        return "Estimada/o $this->name su servicio ha sido confirmado y será cubierto por $this->driver,</br> 
        detalles adicionales de su auto serán enviados a su correo $this->email";
    }
}
    $account = new Account('Diana Garcia', '[email protected]</br>');

car.php

<?php
class Car {
    public $id;
    public $license;
    public $driver;
    public $passenger;

    public function __construct($license, $driver, $id) {
        $this->license = $license;
        $this->driver = $driver;
        $this->id = $id;
    }

    public function printDataCar() {
        return "License number: $this->license</br>" . " Driver name: $this->driver</br>" . " ID Driver: $this->id";
    }
}
$car = new Car('HBZ103', 'Ruben Platzi', 'CC-09871234');




En Python:

class Account:
    id = int
    name = str
    document = str
    email = str
    password = str

    def __init__(self, name, document):
        self.name = name
        self.document = document
from account import Account

class Car:
    id = int
    license = str
    driver = Account("","")
    passegenger = str

    def __init__(self, license, driver):
        self.license = license
        self.driver = driver
from car import Car
from account import Account

if __name__=="__main__":
    print('Hello world')

    car = Car("SAM123", Account("Yordy Andrade", "ABD432"))
    print(vars(car))
    print(vars(car.driver))

Muy interesante lo del método __new__ y la ejecución de dos atributos en una misma línea

Reto 3

index.php

<?php
require_once 'account.php';
require_once 'car.php';

$car = new Car("AMD122" ,new Account("Juan Robledos", "maraca"));
$car->printDataCar();

car.php

<?php
require_once 'account.php';

class Car{
    public $id;
    public $license;
    public $driver;
    public $passenger;

    public function __construct($license,$driver){
        $this->id;
        $this->license = $license;
        $this->driver= $driver;
        $this->passenger;
    }
    public function printDataCar(){
        echo '<p>license: ' . $this->license . '</p>';
        echo '<p>driver: ' . $this->driver->name . '</p>';
        echo '<p>document: ' . $this->driver->document . '</p>';
    }
}

account.php

<?php 
class Account{
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct($name,$document){
        $this->id;
        $this->name = $name;
        $this->document = $document;
        $this->email;
        $this->password;

    }

}

<?php

class Account{
public $id;
public $name;
public $email;
public $document;
public $password;

public function _construct($name,$document){
    $this->name = $name;
    $this->document = $document;
}

public function getName(){
    return $this->name;
}

}

<?php

class Car{
public $id;
public $license;
public $driver;
public $passenger;

public function __construct($license,$driver){
    $this->license = $license;
    $this->driver = $driver;
}

public function __printDataCar(){
    echo $this->license;
    echo "<br>";
    echo $this->driver->getName;
}

}

<?php
include(‘Account.php’);
include(‘Car.php’);

$driver = new Account(‘Paco lourdes’,‘Asd323’);
$car = new Car(‘ARD234’,$driver);
$car->printDataCar();

Por alguna razon me marca warning en Python, pero ejecuta sin ningun problema:

Account.php

<?php

    class Account {
        public $id;
        public $name;
        public $document;
        public $email;

        public function __construct($name, $document)
        {
            $this->name = $name;
            $this->document = $document;
        }
    }

Car.php

<?php
    require_once "Account.php";
    class Car {
        public $id;
        public $license;
        public $driver;
        public $passenger;

        public function __construct($license, Account $driver)
        {
            $this->license = $license;
            $this->driver = $driver;
        }

        public function printDataCar()
        {
            echo "License: " . $this->license . " Driver: " . $this->driver->name;
        }
    }

index.php

<?php

require_once "Car.php";

$driver = new Account("Ricardo Rodriguez", "25143678");
$car = new Car("APM124", $driver);

$car->printDataCar();

clase car.php

clase account.php

index.php

Nos vemos mas adelante python y php

Class Account

Class Car

Index

Reto resuelto:

Account.php

Car.php

index.php

Buenas tardes,
Por favor alguien le ha presentado python este error aa importar las clases ya instale y programe todo las extensiones pero no me permite la importar. Gracias

![](

account.php

<?php 
    class Account{
        public $id;
        public $name;
        public $document; 
        public $email;    
        public $password;

        public function __construct($name, $document){
            $this->name = $name;
            $this->document = $document;
        }

    }
?>

car.php

<?php 
    include_once("account.php");

    class Car{
        public $id;
        public $license;
        public $driver;
        public $passenger;

        public function __construct($license, Account $driver){
            $this->license = $license;
            $this->driver = $driver;
        }

        public function printCarData(){
            $info = "<h1>Informacion del Automóvil: </h1>";
            $info .= "<h2>Conductor: ".$this->driver->name."</h2><br>";
            $info .="<h2>Identificacion: ".$this->driver->document."</h2>";
            $info .= "<h3>Licencia: ".$this->license."</h3><br>";

            return $info;
        }
    }
?>

index.php

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>hola</title>
    </head>
    <body>
        <?php 
            include_once("car.php"); 
            include_once("account.php");
            
            $car = new Car("123AQM", $account = new Account("Luis Alberto", "123ASD"));
            echo $car->printCarData();
        ?>
    </body>
</html>

Algo que no me queda claro es porque al hacerlo en php en la clase car se debe quitar los tipos de los datos.

Clase Car:

Clase Account:

El archivo index.php no pude realizar porque no encontré la explicación a la sintaxis del mismo y no quise copiar y pegar el de los demás.

Solución del reto:

Account.php

<?php
class Account {
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct($name, $document){
        $this->name= $name;
        $this->document= $document;
    }
}
>?

Car.php

<?php
require_once ('Account.php');

class Car {
    public $id;
    public $license;
    public $driver;
    public $passenger;

    public function __construct($license, Account $driver) {
        $this->license= $license;
        $this->driver= $driver;
    }

    public function printDataCar() {
        print 'License: '.$this->license;
        print 'Driver: '.$this->driver->name;
    }
}
?>

index.php

<?php
    require_once ('Car.php');
    require_once ('Account.php');

    $car= new Car('AMQ123', new Account('Michelle Arias', 'AMQ123'));
    $car->printDataCar();
?>

Index.php
<?php
require_once ‘Car.php’;
require_once ‘Account.php’

echo"<h2>Ejemplo de constructores con php</h2>";

$car =  new Car("ANN3256", new Account("Adriana Fernandez", "123456789"));
$car->printDataCar();

?>

Account.php
<?php
class Account{
public $id;
public $name;
public $document;
public $email;
public $password;

public function __construct (name, document){
    this->name=$name;
    this->document=$document;
}

}
?>

Car.php
<?php
require_once(“Account.php”);
class Car{
public $id;
public $license;
public $driver;
public $passenger;

public function __construct(license, Account $driver, $passenger){
    $this->license=$license;
    $this->driver=$driver;
    $this->passenger=$passenger;
}
public function printDataCard(){
    print "Licence: ".$this->license;
    print "Name: ".$this->driver;
    print "Passenger: ".$this->passenger;
}

}
?>

Reto PHP.

😃

Account.php

<?php

class Account{
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct($name, $document){
        $this->name = $name;
        $this->document = $document;
    }
}

Car.php

<?php

class Car{
    public $id;
    public $license;
    public $driver;
    public $passenger;

    function __construct($license, $driver){
        $this->license = $license;
        $this->driver = $driver;
    }

    function printDataCar(){
        echo '<p>License: ' . $this->license . '</p>';
        echo '<p>Driver Name: ' . $this->driver->name . '</p>';
        echo '<p>Driver Document: ' . $this->driver->document . '</p>';
    }
}

index.php

<?php

include("Account.php");
include("Car.php");

$car = new Car("AMQ123", new Account("Andres Herrera","AND123"));
$car->passengers = 4;
$car->printDataCar();
$car2 = new Car("QWE567", new Account("Andrea Herrera","ANDA876"));
$car2->printDataCar();

Resultado:

Hola un saludo a todos! Creo que estuve investigando horas el tema del error de import, muchas veces se les presentara este error, especialmente cuando están usando paquetes o aplicaciones externas como flask, las cuales se refieren a través de un archivo de texto y tiene un procedimiento especifico, pero en el caso de una clase es un verdadero dolor de cabeza, aquí les dejo una solución al problema, espero comenten como les fue!

  1. Abren VsCode y vallan a View>>Command Palette…
  1. En esa ventana escriban Configure Language Especific y seleccionan el texto que halla encontrado la búsqueda
  1. Se les ve a desplegar una lista de lenguajes y escriban python, probablemente les salga magicpython como se ve en la imagen, y hagan click en el.
  1. les va a abrir un archivo Json de nombre “settings.Json”, allí van a ver una serie de lineas que refieren a parámetros de configuración en VsCode, verán una linea que dice esto “python.jediEnabled”: false, desactivenla comentándola como se ven en la imagen, solo coloquen dos “/” al principio, debería quedar así //“python.jediEnabled”: false, posteriormente le dan salvar.
  1. Reinician el VsCode y listo problema solucionado!

![](

Account.php

Car.php

Index.php

Lo logre

¡Constructor en Python!

Listo,

index.php

<?php 
require "Account.php";
require "Car.php";

$car = new Car( "GAH99K",new Account("Jenner Caraballo" , "96053179"));

$car->printDataCar();

Account.php

?php 

class Account{
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct($name, $document)
    {
        $this->name = $name;
        $this->document = $document;

    }
}

Car.php

<?php 

class Car{
    public $id;
    public $license;
    public $driver;
    public $passenger;

    public function __construct($license, $driver)
    {
        $this->license = $license;
        $this->driver  = $driver;
    }

    public function printDataCar(){
        $name = $this->driver->name;
        $document = $this->driver->document;
        echo "Car license: $this->license";
        echo " Driver name: $name" ;
        echo " Driver document: $document ";
    }
}```



Pronto el pollo compañeros! (El de php)

Account:

Car:

Index:

Para ejecutarlo use PHP Server, una extension de VSCode.

Aquí mi versión en PHP

account.php

<code> 
<?php
class Account {
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;
    public function __construct($name, $document)
    {
        $this->name = $name;
        $this->document = $document;
    }
};

car.php

<code>
<?php
require 'account.php';
class Car extends Account{
    public $id;
    public $license; 
    public $driver;
    public $passenger;
    
    public function showCarInfo()
    {
        return "Conductor: $this->name Placas $this->license";
    }
    
    public function __construct($name, $license)
    {
        $this->name = $name;
        $this->license = $license;
    }

} 

index.php

<code> 
<?php
require 'car.php';
$car = new Car("DavidE", "KAL9123");

echo $car->showCarInfo();

Class PHP

<?php

class Account {

    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct ($name, $document)
    {
        $this->name = $name;
        $this->document = $document;
    }
 
}

<?php

class Car {

    public $id;
    public $license;
    public $driver;
    public $passenger;


    public function __construct($licence, Account $driver)
    {
        $this->license = $licence;
        $this->driver  = $driver;
    }


    public function printDataCar () {
        echo 'Licencia: ' . $this->license . '<br>';
        echo 'Conductor: ' . $this->driver->name;

    }
}

ARCHIVO INDEX

<?php

include_once './Account.php';
include_once './Car.php';



$car = new Car('MAD-485', new Account('Mateo Florez', '110285855'));
$car->printDataCar();

Solución al reto en PHP:

Account.php

Car.php

index.php

Resultado en el navegador:

Les comparto una explicación que me ayudó a reforzar el concepto de instancia.

"
_Los atributos y métodos definen las características del objeto y modifican su estado. Son datos que están asociados a ellas. De ellos se desprenden dos tipos de variables, de clase o de instancia (objeto).

  • Las clases agrupan objetos con propiedades y características en común, por ejemplo (Perros)
  • Instancia significa crear un objeto a partir de una clase.
  • Los atributos y métodos son elementos que almacenan datos (diferenciando los objetos dentro de la misma clase) utilizando variables de instancia.
  • Las variables de clase corresponden a una clase determinada y son accesibles sólo invocando la clase.
  • Las variables de instancia también a una clase determinada pero sólo es accesible mediante la instancia del objeto.
    "

Si alguien tiene este error revise la indentacion del metodo constructor en cada clase Account y Car

Car.php

Account.php

Index.php

La salida es la siguiente:

Hice lo de PHP :3, pero no sé como poner imágenes acá :S mi resultado en el server emulado de php:

license: AW456, conductor: Joel Orellana, document: OEM898

Despues de mas de una hora peleando en wsl2 tuve que borrar CursoPOOUber.Python. que se autocompleta en las primeras lineas para las clases Account y Car.

Account.php, Car.php, Index.php

RETO #3

account.php

<?php
class Account{
    private $id;
    private $name;
    private $document;
    private $email;
    private $password;

    public function __Construct($id, $name, $doc){
        $this->setId($id);
        $this->setName($name);
        $this->setDocument($doc);
    }

    public function toString(){
        return $this->name . 
        " identificado/a con el número " . 
        $this->document;
    }

    public function getId(){
        return $this->id;
    }

    public function setId($id){
        $this->id = $id;
    }

    public function getName(){
        return $this->name;
    }

    public function setName($name){
        $this->name = $name;
    }

    public function getDocument(){
        return $this->document;
    }

    public function setDocument($document){
        $this->document = $document;
    }

    public function getEmail(){
        return $this->email;
    }

    public function setEmail($email){
        $this->email = $email;
    }

    public function getPassword(){
        return $this->password;
    }

    public function setPassword($password){
        $this->password = $password;
    }
}
?>

car.php

<?php
class Car{
    private $id;
    private $license;
    private $driver;
    private $passenger;

    public function __Construct($id, $lic, $driver){
        $this->setId($id);
        $this->setLicense($lic);
        $this->setDriver($driver);
    }

    public function toString(){
        return "Automóvil #" . $this->id . 
               " de matricula: " . $this->license . 
               ". Conducido por " . $this->driver->toString() . 
               ". Cuenta con capacidad para " . $this->passenger . 
               " pasajeros.";
    }

    public function getId(){
        return $this->id;
    }

    public function setId($id){
        $this->id = $id;
    }

    public function getLicense(){
        return $this->license;
    }

    public function setLicense($license){
        $this->license = $license;
    }

    public function getDriver(){
        return $this->driver;
    }

    public function setDriver($driver){
        $this->driver = $driver;
    }

    public function getPassenger(){
        return $this->passenger;
    }

    public function setPassenger($passenger){
        $this->passenger = $passenger;
    }
}
?>

index.php

<?php
include_once("account.php");
include_once("car.php");
echo "Hello Word PHP!";

$car1 = new Car("1", "ABC123", new Account("1", "Javier Elias", "1230"));
$car1->setPassenger(4);
echo "\n";
echo $car1->toString();

$car2 = new Car("2", "XYZ789", new Account("2", "Adrian Elias", "1231"));
$car2->setPassenger(3);
echo "\n";
echo $car2->toString();
?>

hola me podrian ayudarme este es mi codigo en php de las sgtes clases:

Account.php

Car.php

index.php

intente correr otro archivo llamado ejemplo.php y si corrió normal pero con el archivo index.php mencionado anteriormente no lo lee y me sale este error:

Quisiera saber cual es el problema ya que tengo mi codigo igual a como muchos lo tienen y no llego a solucionarlo. agradezco su colaboracion de antemano gracias.

Esta es la forma de declarar un constructor en php:

 public function __construct($name,$document) {
        $this->name = $name;
        $this->document = $document;
    }

asi que ahora ya lo saben, hay que seguir progresando en los distintos lenguajes de programacion

Reto: método constructor en PHP

Buenas! Así quedó mi resolución en php. Saludos!




account.php

<?php

    class Account
    {
        public $id;
        public $name;
        public $document;
        public $email;
        public $password;

        public function __construct($name, $document)
        {
            $this->name = $name;
            $this->document = $document;
        }
    }
?>


car.php

<?php 


    require_once "account.php";

    class Car
    {
        public $id;
        public $license;
        public $driver;
        public $passenger;

        public function __construct($license, $driver){
            $this->driver = $driver;
            $this->license = $license;
            
        }


        public function printDataCar(){
            echo "<html><p>Driver: {$this->driver->name}</p> <p>License: $this->license.</p> <p> Document: {$this->driver->document}. </p></html>";
        }
    }

?>


index.php

<?php
    echo "<h1>DATOS</h1>";
    require_once"car.php";
    require_once"account.php";


    class Main 
    {   
        
        public function holaMundo(){
            echo  "Hola mundo"; 
        }
        

        
    }

    $car = new Car ("BQN595", new Account ("Juan Perez", "JDL232"));

    $car->printDataCar();


?>

Luego utilizando al siguiente comando y accediendo al link que nos devuelve podemos ver el resultado.

php -S localhost:8000

Account.php

<?php

class Account
{
    public $id;
    public $name;
    public $document;
    public $email;
    public $password;

    public function __construct(string $name, string $document)
    {
        $this->name = $name;
        $this->document = $document;
    }
} 

Car.php

<?php

require 'Account.php';

class Car
{
    public int $id;
    public string $license;
    public Account $driver;
    public int $passenger;

    public function __construct(string $license, Account $driver)
    {
        $this->license = $license;
        $this->driver = $driver;
    }

    public function printDataCar()
    {
        echo "License: {$this->license} / Name Driver: {$this->driver->name} / Document Driver: {$this->driver->document}";
    }
}

index.php

<?php
require 'Car.php';

$car = new Car("AMQ123", new Account("Andres Herrera", "AND123"));

$car2 = new Car("QWE567", new Account("Andrea Herrera", "AND876"));

$car->printDataCar();

echo "\n\n";

$car2->printDataCar();

Se puede ejecutar desde consola con el CLI de PHP.

Holi esta es la manera en la que complete el reto 3. Se acepta feedback. 🚀📚😀

main.php

<?php
class Account
{
    public int $id;
    public string $name;
    public string $document;
    public string $password;

    public function __construct($name, $document)
    {
        $this->name = $name;
        $this->document = $document;
    }
}

Car.php

<?php
class Car
{
    public int $id;
    public string $license;
    public Account $driver;
    public string $passenger;

    public function __construct($license, $driver)
    {
        $this->license = $license;
        $this->driver = $driver;
    }

    public function printDataCar()
    {
        return "License: $this->license\t" . "Conductor: " . $this->driver->name . " Document: " . $this->driver->document;
    }
}

Account.php

<?php
class Account
{
    public int $id;
    public string $name;
    public string $document;
    public string $password;

    public function __construct($name, $document)
    {
        $this->name = $name;
        $this->document = $document;
    }
}