Python类与方法的完整指南:从基础到高级特性
本文深入解析Python面向对象编程核心概念,涵盖类的定义与实例化、构造方法__init__()的使用、self参数的作用、单继承与多继承机制、方法重写及super()函数的应用,以及私有属性和私有方法的实现原理。通过具体代码示例,帮助开发者掌握Python类与方法的实际用法。
由于对面向对象编程中类和方法的核心思想理解不够透彻,特此整理并分享Python中关于class(类)的相关知识,供学习参考。
类与方法的基本概念及示例
- 类(Class):用于描述具有相同属性和方法对象的集合,它定义了该集合中每个对象共有的属性和行为。对象则是类的具体实例。
- 方法:定义在类内部的函数,用于实现类的具体行为。
- 类的构造方法__init__():每个类都包含一个名为__init__()的特殊方法(即构造方法),在创建类的实例时会自动调用,用于初始化对象状态。
- 实例变量:在类声明中通过变量表示的属性,称为实例变量。这类变量通常以self作为前缀进行修饰,用于存储对象特有的数据。
- 实例化:指创建一个类的具体对象的过程,即生成类的实例。
- 继承:允许一个派生类(derived class)继承基类(base class)的字段和方法。继承也支持将派生类的对象视为基类对象使用。例如,若设计一个Dog类型对象派生自Animal类,这模拟了“是一个(is-a)”的关系(如Dog是Animal的一种)。
1. Python类的定义:class
Python中的class(类)类似于一个由多个函数组成的家族。假设在这个Myclass家族中有一个人叫f,如果f具有打印天气的功能,那么当我们需要f打印今天的天气时,必须通过其全名MyClass.f来调用,即在调用时需带上家族名称(类名)+ 个人名称(方法名)。
- 属性:类内部定义的变量。若将变量比作物品,不同的属性即代表家族中不同的物品。
- 方法:类内部定义的函数。若将函数比作人,不同的方法即代表家族中不同的个体。
MyClass实例化示例:
#Myclass家族,但是这个家族只有一个人f
class MyClass:
"""一个简单的类实例"""
i = 12345
def f(self):
return 'hello world'
# 实例化类
x = MyClass()
# 访问类的属性和方法
print("MyClass 类的属性 i 为:", x.i) #家族x + 物品名i
print("MyClass 类的方法 f 输出为:", x.f()) #家族x + 人名f
输出结果:

2. 类的构造方法__init__()
若将__init__()比作人,它是家族与外界的联系纽带。当外界想要调用家族内部成员时,必须先通知__init__()。因此,只要家族成员被调用,__init__()便会优先执行,再由其通知被调用的具体成员执行相应操作。
__init__()实例演示:
class Complex:
def __init__(self, realpart, imagpart): #必须要有一个self参数,
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
print(x.r, x.i) # 输出结果:3.0 -4.5
输出结果:

3. 类中方法的参数self
在类内部使用def关键字定义方法时,与一般函数不同,类方法必须包含参数self,且作为第一个参数。self代表类的实例本身。
- self:类的方法与普通函数的主要区别在于必须有一个额外的第一个参数,按照惯例命名为self。
- 类的实例化:将类应用于具体场景。例如,若类中有一个函数f具备打印某一时刻天气的能力,当我们需要f打印今天12点的天气时,这一动作即为类的实例化,使类中函数的能力转化为实际执行的操作。
实例化示例:
#类定义
class people:
#定义基本属性
name = ''
age = 0
#定义私有属性,私有属性在类外部无法直接进行访问
#定义构造方法
def __init__(self,n,a):
self.name = n
self.age = a
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
# 实例化类
p = people('Python',10,30)
p.speak()
输出结果:

4. 继承机制
假设有两个家族,家族A开始衰落,而新兴的家族B希望继承家族A的物资和佣人,可通过以下方式实现继承。在此场景中,家族A为父类,家族B为子类。用法上,B家族可任意使用A家族的物资和佣人。
class [子类]([父类]):
- BaseClassName(示例中的基类名)必须与派生类定义在同一作用域内。除了类名,还可以使用表达式;当基类定义在另一个模块中时,这一点尤为有用。
- Python支持多继承,即一个子类可以继承多个父类。继承方式与单继承相同,具体语法如下:
class [子类]([父类]1, [父类]2, [父类]3):
继承示例:
#类定义
class people:
#定义基本属性
name = ''
age = 0
#定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0
#定义构造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
#单继承示例
class student(people): #student为子类,people为父类
grade = ''
def __init__(self,n,a,w,g):
#调用父类的构函
people.__init__(self,n,a,w)
self.grade = g
#覆写父类的方法
def speak(self):
print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
s = student('ken',10,60,3)
s.speak()
运行结果:

5. 方法重写
若父类方法的功能无法满足需求,可在子类中重写父类方法。例如,若B家族继承了A家族,但B家族中某佣人只会扫地,A家族通过“洗脑”使其掌握洗碗和擦桌子技能,则该佣人仅具备新技能。
- super()函数用于调用父类(超类)的方法。
方法重写示例:
class Parent: # 定义父类
def myMethod(self):
print('调用父类方法')
class Child(Parent): # 定义子类
def myMethod(self):
print('调用子类方法')
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法
输出结果:

类的特殊属性与方法
类的私有属性
_private_attrs:以两个下划线开头,声明该属性为私有,不能在类外部直接使用或直接访问。在类内部方法中使用时,需通过self.__private_attrs访问。
私有属性示例:
class JustCounter:
__secretCount = 0 # 私有变量
publicCount = 0 # 公开变量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print(self.__secretCount)
counter = JustCounter()
counter.count()
counter.count()
print(counter.publicCount)
print(counter.__secretCount) # 报错,实例不能访问私有变量
输出结果:

类的私有方法
- __private_method:以两个下划线开头,声明该方法为私有方法,只能在类内部调用,不能在类外部直接调用。在类内部使用时,需通过self.__private_methods访问。
私有方法示例:
class Site:
def __init__(self, name, url):
self.name = name # public
self.__url = url # private
def who(self):
print('name : ', self.name)
print('url : ', self.__url)
def __foo(self): # 私有方法
print('这是私有方法')
def foo(self): # 公共方法
print('这是公共方法')
self.__foo()
x = Site('Python', 'www.irvingao.com')
x.who() # 正常输出
x.foo() # 正常输出
x.__foo() # 报错
输出结果:

参考学习资料:
Python3 面向对象编程文档
总结
至此,关于Python中class类与方法的文章介绍完毕。如需了解更多Python class类与方法相关内容,请搜索本站过往文章或继续浏览后续相关文章。希望大家今后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









