Python面向对象编程
Python是一种面向对象的编程语言,这意味着它支持面向对象的编程范式,其中包括封装、继承和多态等概念。在Python中,一切皆为对象,包括数字、字符串、函数等。
类和对象
类(Class)是创建对象的蓝图。它定义了对象的属性和行为。对象(Object)是类的实例,具有类定义的属性和行为。
python
复制
class MyClass: # 类属性 class_attribute = "This is a class attribute." def __init__(self, name): # 实例属性 self.name = name # 实例方法 def my_method(self): print(f"Hello, {self.name}!") # 创建对象 my_object = MyClass("Alice") # 访问属性 print(my_object.name) # 输出: Alice print(MyClass.class_attribute) # 输出: This is a class attribute. # 调用方法 my_object.my_method() # 输出: Hello, Alice!
封装
封装是指隐藏对象的内部细节,只暴露出有限的接口与外部进行交互。在Python中,任何以双下划线__开头的方法或属性都是私有的,不能从外部直接访问。
python
复制
class MyClass: def __init__(self, name): self.__name = name # 私有属性 def get_name(self): return self.__name def set_name(self, value): self.__name = value # 创建对象 my_object = MyClass("Alice") # 访问私有属性会报错 # print(my_object.__name) # 报错 # 通过公共方法访问私有属性 print(my_object.get_name()) # 输出: Alice # 通过公共方法修改私有属性 my_object.set_name("Bob") print(my_object.get_name()) # 输出: Bob
继承
继承允许我们创建一个新的类(子类)来继承一个已有的类(父类)的属性和方法。子类可以添加新的属性和方法,或者覆盖父类的方法。
python
复制
class ParentClass: def __init__(self): self.parent_attribute = "This is a parent attribute." def parent_method(self): print("This is a parent method.") class ChildClass(ParentClass): def __init__(self): super().__init__() # 调用父类的构造方法 self.child_attribute = "This is a child attribute." def child_method(self): print("This is a child method.") # 创建子类对象 child_object = ChildClass() # 访问父类和子类的属性 print(child_object.parent_attribute) # 输出: This is a parent attribute. print(child_object.child_attribute) # 输出: This is a child attribute. # 调用父类和子类的方法 child_object.parent_method() # 输出: This is a parent method. child_object.child_method() # 输出: This is a child method.
多态
多态是指不同类的对象对同一消息作出响应的能力。在Python中,这意味着我们可以定义一个通用接口,让不同类的对象都实现这个接口,从而实现多态。
python
复制
class Dog: def make_sound(self): print("Woof!") class Cat: def make_sound(self): print("Meow!") def animal_sound(animal): animal.make_sound() # 创建对象 dog = Dog() cat = Cat() # 调用函数实现多态 animal_sound(dog) # 输出: Woof! animal_sound(cat) # 输出: Meow!
类方法、静态方法和属性
类方法:使用@classmethod装饰器定义,类方法接收一个指向类本身的引用(通常命名为cls)作为第一个参数。
静态方法:使用@staticmethod装饰器定义,静态方法不需要指定任何特殊的第一参数。
属性:可以使用@property装饰器来创建只读属性,或者通过定义 getter、setter 和 deleter 方法来创建读写属性。
python
复制
class MyClass: @classmethod def class_method(cls): print("This is a class method.") @staticmethod def static_method(): print("This is a static method.") @property def read_only_property(self): return "This is a read-only property." def _get_value(self): return self._value def _set_value(self, value): self._value = value value = property(_get_value, _set_value) # 创建对象 my_object = MyClass() # 调用类方法 my_object.class_method() # 输出: