Structs in D Programming Language

Based on the provided instructions, the target language is Python. Here is the translation of the Go code example into Python, along with explanations in Markdown format suitable for Hugo.


Structs in Python

In Python, we use classes to define similar data structures as structs in other languages. Here’s an example to illustrate the concept.

class Person:
    def __init__(self, name, age=0):
        self.name = name
        self.age = age

def new_person(name):
    p = Person(name)
    p.age = 42
    return p

def main():
    print(Person("Bob", 20))
    print(Person(name="Alice", age=30))
    print(Person(name="Fred"))
    print(Person(name="Ann", age=40))
    print(new_person("Jon"))

    s = Person(name="Sean", age=50)
    print(s.name)

    sp = s
    print(sp.age)

    sp.age = 51
    print(sp.age)

    dog = {"name": "Rex", "is_good": True}
    print(dog)

if __name__ == "__main__":
    main()

Explanation:

  • Class Definition: Python uses classes to define similar data structures as structs.
  • Constructor: The __init__ method acts as the constructor.
  • Creating Instances: Instances of the class are created by calling the class with the required arguments.
  • Defining a Function: The new_person function creates a new Person instance and sets an age default.
  • Accessing Object Properties: Properties of an instance are accessed using dot notation.
  • Anonymous Structs: In Python, dictionaries serve the purpose of anonymous structs.

Running the Code:

To run the program, save it to a file, for example, structs.py, and execute it with Python.

$ python structs.py
<__main__.Person object at 0x7f8301731c70>
<__main__.Person object at 0x7f8301731dc0>
<__main__.Person object at 0x7f8301731d30>
<__main__.Person object at 0x7f8301731df0>
<__main__.Person object at 0x7f8301731e50>
Sean
50
51
{'name': 'Rex', 'is_good': True}

Python does not display the content of objects directly, so to make it more readable, you could define a __str__ method in the Person class:

class Person:
    def __init__(self, name, age=0):
        self.name = name
        self.age = age

    def __str__(self):
        return f"Person(name={self.name}, age={self.age})"

With this change, the output will be more readable.

$ python structs.py
Person(name=Bob, age=20)
Person(name=Alice, age=30)
Person(name=Fred, age=0)
Person(name=Ann, age=40)
Person(name=Jon, age=42)
Sean
50
51
{'name': 'Rex', 'is_good': True}

Next example: Methods.