1、类(Class)
类是创建对象的蓝图。它定义了一组属性(称为字段或变量)和方法(类中定义的函数)。
class MyClass: def __init__(self, attribute_value): self.attribute = attribute_value def method(self): return self.attribute
2、对象(Object)
对象是类的实例。当类被实例化时,会创建一个对象。每个对象都有自己的属性和方法,它们与类中定义的属性和方法相关联。
class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print(f"Hello, {self.name}。{self.age}岁") person1 = Person("张三", 30) person2 = Person("李四", 25) person1.say_hello() person2.say_hello()
3、属性(Attribute)
属性是对象的数据成员,它们用于存储对象的状态。属性通常在类的构造函数 __init__
中初始化,并通过 self 关键字访问。
class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print(f"Hello, {self.name}。{self.age}岁") person1 = Person("张三", 30) person2 = Person("李四", 25) #访问对象的属性 print(person1.name) print(person2.name)
4、方法(Method)
方法是与对象相关联的函数。它们用于执行特定的操作。方法通常以 self 作为第一个参数,以便访问对象的属性和其他方法。
class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print(f"Hello, {self.name}。{self.age}岁") person1 = Person("张三", 30) person2 = Person("李四", 25) #调用对象的方法 person1.say_hello() person2.say_hello()
5、继承(Inheritance)
继承是一种机制,它允许创建一个新的类(子类),该类可以继承另一个类(父类)的属性和方法。子类可以扩展或修改继承的属性和方法。
1)基本继承
Python所有类都是object的特殊类的子类,这个和其它语言中的类似,我们不指定父类,类是自动从object继承过来。我们也可以显示声明从object类继承,例如,
class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print(f"Hello, {self.name}。{self.age}岁") class Student(Person, object): def __init__(self, name, age, student_id): super().__init__(name, age) # 调用父类的构造函数 self.student_id = student_id def study(self): print(f"{self.name} is studying.") student = Student("Lingliang", 21, "12345") student.say_hello()
2)扩展内置类
可以继承内置类并扩展它们,以添加自定义的功能或行为。这可以通过创建一个新的类,并在新的类中继承内置类的属性和方法来实现。例如,
class MyList(list): def sum(self): """计算列表元素的总和""" total = 0 for num in self: total += num return total def average(self): """计算列表元素的平均值""" if len(self) == 0: return 0 return sum(self) / len(self) def append_unique(self, item): """仅当元素不在列表中时才添加元素""" if item not in self: self.append(item) # 创建 MyList 对象 my_list = MyList([1, 2, 3, 4, 5]) # 使用继承的方法 print("Sum:", my_list.sum()) # 输出 Sum: 15 print("Average:", my_list.average()) # 输出 Average: 3.0 # 使用自定义方法 my_list.append_unique(3) my_list.append_unique(6) print("Unique List:", my_list) # 输出 Unique List: [1, 2, 3, 4, 5, 6]
3)重写和Super
可以使用继承、方法重写和super()函数来扩展和自定义父类的行为。
class Animal: def __init__(self, name): self.name = name def speak(self): pass class Dog(Animal): def speak(self): return f"{self.name} C#!" class Cat(Animal): def speak(self): return f"{self.name} Java!" class Parrot(Animal): def __init__(self, name, words): super().__init__(name) # 调用父类的构造函数 self.words = words def speak(self): return f"{self.name} {self.words}!" # 创建不同的动物对象 dog = Dog("d1") cat = Cat("d2") parrot = Parrot("cjavapy", "Python") # 调用各自的speak方法 print(dog.speak()) print(cat.speak()) print(parrot.speak())
4)多重继承
Python 3 支持多重继承,也就是一个类可以继承自多个父类。子类可以继承多个父类的属性和方法。多重继承在某些情况下非常有用,但也需要小心使用,以避免潜在的复杂性和命名冲突。
# 定义父类 A class A: def method_A(self): print("Method A from class A") # 定义父类 B class B: def method_B(self): print("Method B from class B") # 定义子类 C,继承自 A 和 B class C(A, B): def method_C(self): print("Method C from class C") # 创建 C 的对象 obj_C = C() # 调用 C 的方法 obj_C.method_A() # 输出 Method A from class A obj_C.method_B() # 输出 Method B from class B obj_C.method_C() # 输出 Method C from class C
5)多态
多态(Polymorphism)是面向对象编程的一个重要概念,它允许不同的对象对相同的方法名做出不同的响应。
class Animal: def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" class Cow(Animal): def speak(self): return "Moo!" # 创建不同的动物对象 animals = [Dog(),Cat(),Cow()] # 调用相同的方法名,但不同的对象产生不同的输出 for animal in animals : print(animal.speak())
6)封装
封装(Encapsulation)是面向对象编程(OOP)的一个重要概念,它指的是将类的内部数据和实现细节隐藏起来,只暴露必要的接口。封装有助于保护数据的完整性和安全性,并使代码更具可维护性和可扩展性。
class Student: def __init__(self, name, age): self.__name = name # 将属性name封装成私有属性 self.__age = age # 使用属性来访问和修改私有属性name @property def name(self): return self.__name @name.setter def name(self, new_name): if isinstance(new_name, str): self.__name = new_name else: print("Name must be a string.") # 使用方法来访问和修改私有属性age def get_age(self): return self.__age def set_age(self, new_age): if isinstance(new_age, int) and 0 <= new_age <= 150: self.__age = new_age else: print("Age must be an integer between 0 and 150.") def display_info(self): print(f"Name: {self.name}, Age: {self.get_age()}") # 创建Student对象 student = Student("Levi", 25) # 通过属性和方法访问和修改对象的属性 student.name = "John" student.set_age(30) # 显示学生信息 student.display_info()