面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。在Python中,对象是类的实例,类则定义了这些对象应该具备的属性和方法。
类的基本概念
类:描述了一组具有共同属性和方法的对象。
对象:是类的实例。
方法:类中定义的函数。
属性:类中定义的数据成员,包括类变量和实例变量。
继承:子类可以从父类继承属性和方法。
多继承:一个子类可以继承多个父类。
方法重写:子类可以重写父类的方法以提供不同的实现。
构造方法:__init__(),在对象创建时被调用。
私有成员:双下划线__开头的属性或方法只能在类内部访问。
# 定义一个基础类
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def speak(self):
print(f"{self.name} 说: 我 {self.age} 岁。")
# 定义一个继承自Person的子类
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age) # 调用父类构造器
self.grade = grade
def speak(self): # 方法重写
print(f"{self.name} 说: 我 {self.age} 岁了,我在读 {self.grade} 年级。")
# 定义另一个类
class Speaker:
def __init__(self, name, topic):
self.name = name
self.topic = topic
def speak(self):
print(f"我叫 {self.name},我是一个演说家,我演讲的主题是 {self.topic}。")
# 多继承示例
class Sample(Speaker, Student):
def __init__(self, name, age, grade, topic):
Student.__init__(self, name, age, grade) # 调用Student构造器
Speaker.__init__(self, name, topic) # 调用Speaker构造器
# 运算符重载示例
class Vector:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return f'Vector ({self.a}, {self.b})'
def __add__(self, other):
return Vector(self.a + other.a, self.b + other.b)
# 测试代码
if __name__ == "__main__":
s = Sample("Tim", 25, 4, "Python")
s.speak()
v1 = Vector(2, 10)
v2 = Vector(5, -2)
print(v1 + v2)
这段代码展示了如何定义类、继承、方法重写以及如何实现运算符重载。通过这些基本概念的理解和实践。
类的私有成员
在Python中,虽然没有严格的私有成员,但可以通过约定来表明某些属性或方法不应该在类的外部使用。这通常是通过在属性或方法名称前加上两个下划线__来实现的。这种命名方式会导致Python解释器对名称进行修改(名称改写),使得直接访问变得困难。
私有属性示例
class Counter:
__secret_count = 0 # 私有变量
def count(self):
self.__secret_count += 1
print(f"计数: {self.__secret_count}")
c = Counter()
c.count() # 输出: 计数: 1
c.count() # 输出: 计数: 2
print(c._Counter__secret_count) # 可以通过名称改写的方式访问,但不推荐
类的私有方法
类似地,方法也可以通过添加双下划线前缀来标记为私有。
私有方法示例
class WebSite:
def __init__(self, name, url):
self.name = name
self.__url = url # 私有变量
def who(self):
print(f'网站名称: {self.name}')
print(f'网址: {self.__url}')
def __private_method(self): # 私有方法
print("这是一个私有方法,只能在类的内部调用。")
def public_method(self):
self.__private_method() # 在类的内部调用私有方法
print("这是一个公共方法。")
ws = WebSite("示例网站", "http://example.com")
ws.who()
ws.public_method()
# ws.__private_method() # 将会抛出错误,因为这是私有的
类的专有方法
Python中的一些专有方法,如__init__和__str__,可以让类的行为更加符合预期。下面列出了一些常用的专有方法:
__init__(self, ...):构造函数,在创建对象时被调用。
__del__(self):析构函数,在删除对象时被调用。
__repr__(self):返回对象的字符串表示,主要用于调试。
__str__(self):返回用户友好的字符串表示。
__add__(self, other):重载加法运算符。
__len__(self):重载内置函数len()。
重载__len__方法示例
class StringList:
def __init__(self):
self.items = []
def add(self, item):
self.items.append(item)
def __len__(self):
return len(self.items)
sl = StringList()
sl.add("Hello")
sl.add("World")
print(len(sl)) # 输出: 2
这篇文章就到这里,祝大家学习快乐