📜  Python对象类(1)

📅  最后修改于: 2023-12-03 15:19:33.153000             🧑  作者: Mango

Python对象类

在Python中,一切皆为对象。对象是Python中的基本单元,所有的数据类型都是对象,包括数字、字符串、列表、元组、字典等等。在Python中,每个对象都有其对应的类,而类就像是一个模板,可以用来创建对象。

定义类

在Python中,使用class关键字来定义类。下面是一个示例:

class MyClass:
    pass

上面的代码定义了一个名为MyClass的类,其中的pass表示类的定义体为空。

创建对象

在Python中,使用类来创建一个对象的过程称为实例化。使用类名加上括号即可实例化一个对象,下面是一个示例:

mc = MyClass()

上面的代码创建了一个名为mcMyClass对象。

类和对象的属性和方法

在Python中,类和对象都可以有属性和方法。属性是类或对象的数据,而方法是类或对象的行为。

类属性和方法

类属性和方法是在类中定义的,所有的对象都共享同一个类属性。下面是一个示例:

class MyClass:
    class_var = 0
    
    @classmethod
    def class_method(cls):
        cls.class_var += 1

上面的代码定义了一个名为MyClass的类,其中包含一个类属性class_var和一个类方法class_method。类属性可以通过类名或对象名来访问,而类方法只能通过类名来调用。

实例属性和方法

实例属性和方法是在对象中定义的,每个对象都有自己的一份实例属性和方法。下面是一个示例:

class MyClass:
    def __init__(self, instance_var):
        self.instance_var = instance_var
    
    def instance_method(self):
        print(self.instance_var)

上面的代码定义了一个名为MyClass的类,其中包含一个实例属性instance_var和一个实例方法instance_method。实例属性和方法只能通过对象名来访问和调用。

封装、继承和多态

在Python中,封装、继承和多态是面向对象编程的三个基本特性。下面简单介绍一下它们:

封装

封装是将类的实现细节隐藏起来,只对外暴露必要的接口。在Python中,使用__来表示私有属性或方法。下面是一个示例:

class MyClass:
    def __init__(self):
        self.__private_var = 0
    
    def get_private_var(self):
        return self.__private_var
    
    def set_private_var(self, value):
        self.__private_var = value

上面的代码定义了一个名为MyClass的类,其中有一个私有属性__private_var和两个公有方法get_private_varset_private_var。私有属性只能在类内部访问和修改,而公有方法提供了对私有属性的访问和修改。

继承

继承是指一个类从另一个类中继承属性和方法。在Python中,继承使用类名加括号的形式来表示,下面是一个示例:

class MyDerivedClass(MyBaseClass):
    pass

上面的代码定义了一个名为MyDerivedClass的类,它从MyBaseClass类中继承属性和方法。子类可以重写父类的方法,这也是实现多态的一种方式。

多态

多态是指不同的对象可以对同一方法作出不同的响应。在Python中,多态可以通过方法重写和方法重载来实现,下面是一个示例:

class MyParentClass:
    def my_method(self):
        print("parent class")
    
class MyChildClass(MyParentClass):
    def my_method(self):
        print("child class")
    
def my_function(obj):
    obj.my_method()

parent_obj = MyParentClass()
child_obj = MyChildClass()

my_function(parent_obj)  # 输出:parent class
my_function(child_obj)  # 输出:child class

上面的代码定义了一个名为MyParentClass的父类和一个名为MyChildClass的子类,它们都有一个名为my_method的方法。在函数my_function中,如果传入的是父类对象,输出"parent class",如果传入的是子类对象,输出"child class",这就是多态的一种体现。