欢迎访问宙启技术站
智能推送

OOP编程中常用的magicmethods:__get()、__set()、__construct()、__destruct()

发布时间:2023-06-18 23:26:11

在OOP编程中,magic methods是一组在类定义中具有特殊行为的函数。这些方法的名称以双下划线开头和结尾,并且它们在类实例的生命周期中会自动调用。

在Python中,这些magic methods包括__init__()、__getattr__()、__setattr__()和__del__()等。下面我们将重点介绍其中的四个magic methods:__get()、__set()、__construct()、__destruct()。

1.__get()

__get()是类中最常用的magic method之一,它允许我们在调用对象属性时自定义行为。我们可以通过__get()方法来获取对象的属性值,并对其进行一系列的处理。比如,在一个Person类中,我们可以通过__get()方法来对年龄这个属性进行判断,如果年龄大于18,则返回True,否则返回False。

示例代码:

class Person:

    def __init__(self, name, age):

        self._name = name

        self._age = age

    def __get__(self, instance, owner):

        if self._age >= 18:

            return True

        else:

            return False

person = Person("Tom", 19)

print(person._age)  # 19

print(person._name)  # Tom

print(person)  # True

上述代码实现了对于Person类中年龄属性的判断,如果实例的年龄属性大于18,则返回True。

2.__set()

__set()方法允许我们在设置对象属性时自定义行为。我们可以通过在类中定义__set()方法来限制对象属性的值,或者在对象属性值发生改变时进行其他操作。

示例代码:

class Person:

    def __init__(self, name, age):

        self._name = name

        self._age = age

    def __set__(self,instance,value):

        if value < 0:

            raise ValueError("Age can not be negative.")

        self._age = value

  

person = Person("Tom", 19)

person._age = -1 # 报错 ValueError: Age can not be negative.

上述代码在赋值操作时,如果年龄小于0,会抛出异常并终止程序的执行。

3.__construct()

__construct()方法是在类实例化时自动调用的初始化方法。该方法允许我们在创建类实例时对其进行一系列的初始化操作。

示例代码:

class Person:

    def __init__(self, name, age):

        self._name = name

        self._age = age

        print("Instance of Person has been created.")

    def __construct__(self, name, age):

        self._name = name

        self._age = age

        print("Instance of Person has been created.")

person = Person("Tom", 19)

 

# Output: Instance of Person has been created.

#         Instance of Person has been created.

上述代码中,我们在Person类中定义了__construct()方法,并在创建类实例时调用了它。在输出中可以看到,__init__()和__construct__()方法都被成功的执行了。

4. __destruct__()

__destruct()方法是Python中最常用的magic method之一,它在类实例结束生命周期时被自动调用。该方法是一个非常重要的方法,因为我们可以在该方法中对类实例进行垃圾回收或释放资源等操作。

示例代码:

class Person:

    def __init__(self, name, age):

        self._name = name

        self._age = age

    def __destruct__(self):

        print("Instance of Person has been destroyed.")

person = Person("Tom", 19)

del person

# Output: Instance of Person has been destroyed.

上述代码中当我们删除变量person时,Python会自动调用对象的__destruct__()方法,并输出“Instance of Person has been destroyed.”。

总结:

magic methods是Python中OOP编程中非常重要的概念,这些方法拥有特殊的名称和行为,可以帮助我们自定义类的行为。在本文中,我们讲解了四个常用的magic methods: __get()、__set()、__construct()、__destruct(),并且给出了相应的示例代码。当然,这四种方法只是在Python OOP编程中的一个开端,掌握OOP编程中的magic methods,可以让我们在日常编程中操作其他类似方法更加得心应手。