python代码类的公有属性、私有属性、公有函数、私有函数、对外接口、抽象类、继承、函数重写到底是什么?

在Python中,类的设计允许我们封装数据(属性)和行为(方法),以及通过继承来复用代码。下面,将针对各个概念进行详细解释,并给出相应的示例代码。

1. 公有属性与私有属性

  • 公有属性:在类中定义的,没有以双下划线(__)开头的属性。这些属性可以在类的外部被访问和修改。
  • 私有属性:以双下划线(__)开头的属性。这些属性在Python中被视为“私有”的,即它们只能被类的内部方法访问和修改。然而,Python并没有真正的私有属性,只是通过名称改写(name mangling)来避免外部直接访问。
class MyClass:  
    def __init__(self, public_attr, private_attr):  
        self.public_attr = public_attr  
        self.__private_attr = private_attr  
  
# 使用  
obj = MyClass(10, 20)  
print(obj.public_attr)  # 正确访问公有属性  
# print(obj.__private_attr)  # 错误,直接访问私有属性会抛出AttributeError  
  
# 间接访问私有属性  
print(obj._MyClass__private_attr)  # Python的name mangling机制

2. 公有函数与私有函数

  • 公有函数:类中定义的,没有以双下划线(__)开头的函数(方法)。这些函数可以在类的外部被调用。
  • 私有函数:以双下划线(__)开头的函数(方法)。这些函数在类的外部不可直接调用,但可以在类的内部被调用。
class MyClass:  
    def public_method(self):  
        print("这是一个公有方法")  
  
    def __private_method(self):  
        print("这是一个私有方法")  
  
# 使用  
obj = MyClass()  
obj.public_method()  # 正确调用公有方法  
# obj.__private_method()  # 错误,直接调用私有方法会抛出AttributeError  
  
# 间接调用私有方法(不推荐)  
MyClass._MyClass__private_method(obj)

4. 对外接口

对外接口通常是指类向外部提供的公有方法和属性,通过这些接口,外部可以与类进行交互。

5. 抽象类

抽象类是一种特殊的类,它不能被实例化,但可以被用作基类来定义一些抽象方法(没有具体实现的方法),强制子类实现这些方法。

from abc import ABC, abstractmethod  
  
class MyAbstractClass(ABC):  
    @abstractmethod  
    def my_abstract_method(self):  
        pass  
  
class MyConcreteClass(MyAbstractClass):  
    def my_abstract_method(self):  
        print("实现了抽象方法")  
  
# MyAbstractClass()  # 错误,抽象类不能被实例化  
obj = MyConcreteClass()  
obj.my_abstract_method()

6. 继承

继承允许我们定义一个类(子类)来继承另一个类(父类)的属性和方法。子类可以添加新的属性或重写父类的方法。

class Parent:  
    def __init__(self):  
        self.parent_attr = "我是父类的属性"  
  
    def parent_method(self):  
        print("我是父类的方法")  
  
class Child(Parent):  
    def __init__(self):  
        super().__init__()  # 调用父类的__init__  
        self.child_attr = "我是子类的属性"  
  
    def parent_method(self):  
        super().parent_method()  # 调用父类的方法  
        print("我也重写了父类的方法")  
  
obj = Child()  
print(obj.parent_attr)  
print(obj.child_attr)  
obj.parent_method()

7. 函数重写

在子类中定义与父类同名的函数(方法),以实现不同的功能,这称为函数重写(或方法重写)。在上面的Child类中,parent_method就是一个重写的例子。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值