面向对象编程

昨天学习了面向对象编程中的实例属性和实例方法,类变量和类方法,静态方法。下面继续学习面向对象编程的封装(Encapsulation),继承(Inheritance),多态(Polymorphism)。
封装(Encapsulation)

封装是面向对象编程的一个基本概念,它将数据(属性)和操作这些数据的方法(函数)绑定在一起,形成一个类,同时将一些实现细节隐藏起来,只暴露出必要的接口。封装有助于数据的保护和隐藏,避免外部代码直接访问和修改对象的内部状态,从而增加代码的安全性和可维护性。

封装的主要目的是:数据隐藏,控制访问,代码模块化,增加代码的灵活性。

而其中通过定义公开(public)、受保护(protected)和私有(private)属性和方法,可以控制哪些部分可以被外部访问,哪些部分只能被内部访问。

公开成员(public):默认情况下,所有的属性和方法都是公有的,可以被外部代码访问,不需要加任何前缀,

class MyClass:    def __init__(self):        self.public_var = "I am public"        def public_method(self):        return "This is a public method"
obj = MyClass()print(obj.public_var)  # 输出: I am publicprint(obj.public_method())  # 输出: This is a public method

受保护(protected):受保护成员以单个下划线_开头,表示不建议外部代码直接访问,但仍然可以访问。

class MyClass:    def __init__(self):        self._protected_var = "I am protected"        def _protected_method(self):        return "This is a protected method"
obj = MyClass()print(obj._protected_var)  # 输出: I am protectedprint(obj._protected_method())  # 输出: This is a protected method

私有(private):私有成员以双下划线__开头,用于强制数据隐藏。私有成员在类外部不能直接访问。

class MyClass:    def __init__(self):        self.__private_var = "I am private"        def __private_method(self):        return "This is a private method"        def get_private_var(self):        return self.__private_var
obj = MyClass()# print(obj.__private_var)  # 这会引发 AttributeErrorprint(obj.get_private_var())  # 输出: I am private

属性方法(Property)

属性方法是一种用于封装数据的技术,它允许我们使用方法来访问属性,同时保持与访问普通属性相同的语法。使用@property装饰器,可以将方法转换为属性。

class MyClass:    def __init__(self, value):        self.__value = value        @property  # getter方法    def value(self):        return self.__value        @value.setter  # setter方法    def value(self, new_value):        if new_value > 0:            self.__value = new_value        else:            raise ValueError("Value must be positive")        @value.deleter  # deleter方法    def value(self):        del self.__value
obj = MyClass(10)print(obj.value)  # 输出: 10obj.value = 20print(obj.value)  # 输出: 20# obj.value = -10  # 这会引发 ValueErrordel obj.value# print(obj.value)  # 这会引发 AttributeError

继承(Inheritance)

继承是面向对象编程(OOP)的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码重用和扩展。通过继承,子类不仅可以拥有父类的所有特性,还可以添加自己的特性或重写父类的特性。

父类(基类/超类):提供继承的类,父类包含子类可以继承的属性和方法。

子类(派生类):继承父类的类,子类可以继承父类的属性和方法,并且可以添加新的属性和方法,或者重新父类的方法

class ParentClass:    def __init__(self, attribute):        self.attribute = attribute
    def parent_method(self):        print("This is a method in the parent class")
class ChildClass(ParentClass):    def __init__(self, attribute, child_attribute):        super().__init__(attribute)  # 调用父类的构造函数        self.child_attribute = child_attribute
    def child_method(self):        print("This is a method in the child class")
其中继承的类型可以是单继承和多重继承。
单继承:一个子类只继承一个父类。
class Parent:    pass
class Child(Parent):    pass
多重继承:一个子类继承多个父类,只方法在编制中较为复杂,需要谨慎使用。
class Parent1:    pass
class Parent2:    pass
class Child(Parent1, Parent2):    pass
特别讲一下方法重写(Overriding
子类可以重写(override)父类的方法,即在子类中定义与父类同名的方法。这样,当子类对象调用该方法时,会执行子类的方法,而不是父类的方法。
class Parent:    def speak(self):        return "Hello from Parent"
class Child(Parent):    def speak(self):        return "Hello from Child"
child = Child()print(child.speak())  # 输出: Hello from Child
使用‘super()’函数
super()函数用于调用父类的方法,特别是在重写父类方法时,常用于调用父类的构造函数。
class Parent:    def __init__(self, name):        self.name = name
class Child(Parent):    def __init__(self, name, age):        super().__init__(name)  # 调用父类的构造函数        self.age = age
child = Child("Alice", 30)print(child.name)  # 输出: Aliceprint(child.age)   # 输出: 30
多态(Polymorphism)

多态是面向对象编程(OOP)的一个重要特性,它允许对象以多种形式出现。在Python中,多态性通过继承和方法重写实现,使得同一个方法在不同的对象上可以有不同的行为。多态性提高了代码的灵活性和可扩展性。

  1. 方法重写(Overriding):
    • 子类可以重写父类的方法,即在子类中定义与父类同名的方法。这样,当子类对象调用该方法时,会执行子类的方法,而不是父类的方法。
  2. 动态绑定(Dynamic Binding):
    • 方法调用在运行时绑定到具体的实现上,这意味着调用哪个方法是在运行时决定的,而不是在编译时决定的。
  3. 接口一致性:
    • 多态性要求子类实现父类的方法接口(方法签名一致),从而保证子类对象可以在任何父类对象可出现的地方使用。
class Shape(ABC):    @abstractmethod    def area(self):        pass
class Circle(Shape):    def __init__(self, radius):        self.radius = radius
    def area(self):        return 3.14 * self.radius ** 2
class Rectangle(Shape):    def __init__(self, width, height):        self.width = width        self.height = height
    def area(self):        return self.width * self.height
# 使用多态性def print_area(shape):    print(f"The area is: {shape.area()}")
circle = Circle(5)rectangle = Rectangle(4, 6)
print_area(circle)     # 输出: The area is: 78.5print_area(rectangle)  # 输出: The area is: 24

 

学习python最快的方法就是在实际中运用起来。

原创文章,作者:速盾高防cdn,如若转载,请注明出处:https://www.sudun.com/ask/82855.html

(0)
速盾高防cdn的头像速盾高防cdn
上一篇 2024年5月31日 下午5:19
下一篇 2024年5月31日

相关推荐

  • 如何选择最适合的服务器高防ip?

    云服务器行业的发展已经成为当今网络世界中不可或缺的一部分,而在保障服务器安全方面,高防ip的作用也越来越受到重视。那么,如何选择最适合的服务器高防ip?让我们一起来探索这个备受关注…

    行业资讯 2024年4月3日
    0
  • 阿里云续费太贵怎么办,阿里云主机续费优惠

    今天我要讲一个很热门的话题:——阿里云服务器续费优惠。随着网络安全行业的快速发展,阿里云服务器已经成为很多企业和个人的首选。那么什么是阿里云服务器?常见的更新方式有哪些?更重要的是…

    行业资讯 2024年3月19日
    0
  • 浪潮gpu服务器价格

    在当今云服务器行业中,GPU服务器备受瞩目。它不仅拥有强大的计算能力,更具有出色的图形处理能力。而浪潮作为国内知名云服务器品牌,其推出的GPU服务器更是备受关注。那么,究竟什么是G…

    行业资讯 2024年4月6日
    0
  • 美国asp空间是什么软件,asp空间试用

    价格和付款方式可能因ASP Space 服务提供商而异。在选择时,您可以通过比较各个服务提供商的费用和付款方式来选择适合您的服务。 5.考虑服务器稳定性和安全性 服务器稳定性和安全…

    行业资讯 2024年4月12日
    0

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注