
Python面向对象编程中关于类和方法的学习笔记
类与类方法是面向对象的编程语言中必不可少的特性,本文总结了Python面向对象编程中关于类和方法的学习笔记,需要的朋友可以参考下
类和实例
python是一个面向对象的语言,而面向对象最重要的概念就是类和实例, 记得刚学习的时候不太理解这些概念,直到老师说了一句”物以类聚”. 没错就是类, 归类
物以类聚
类其实就是把一些相同特性的事物归成一类, 比如人
class Person(object):
pass
我们定义了人这个类, 但人有一些特性,比如 两个眼睛,一个嘴巴, 我们把这些添加进去
class Person(object):
eyes = 2
mouth = 1
已经把人的一些信息写进去了,但是人还有名字, 比如我mink. 好吧我不能亏待自己我得把这些添加进去
class Person(object):
eyes = 2
mouth = 1
name = mink
太完美了,一个人终于完成了. 上帝用了一天我就用了一分钟(开个玩笑), 我们读一下信息. 人类他有两个眼睛,一个嘴巴,还有名字叫mink. - -! 有点不对,mink是我的名字啊~ 怎么人类叫mink呢
mink是人类的名字, 人类的名字是mink显然是错误的, “wo” 应该是人类的个体,是个单个例子
class Person(object):
eyes = 2
mouth = 1
def __init__(self, name):
self.name = name
me = Person('mink')
现在我终于有了自己的名字而不是给大家共用, 这个方法叫实例但是我有一个别人不会的技能, 我不受重力影响.
class Person(object):
eyes = 2
mouth = 1
def __init__(self, name)
self.name = name
def jineng(self, txt):
print "%s %s" % (self.name, txt)
me = Person('mink')
me.jineng("我不受重力影响, 我会飞")
类方法和静态方法
python中可以经常看到@classmethod和@staticmethod, 被称为类方法和实例方法.
class Animal(object):
name = 'lili'
age = 1
cat = Animal()
print cat.name, cat.age # print 'lili' 1
创建了一个动物类, 生成了一个cat的实例, 打印cat的名字和年龄, 可以看出返回的是Animal这个类的属性, 也就是实例访问了类的属性
# 显示内容是一样的
print cat.name, cat.age
print Animal.name, Animal.age
给Animal类添加一个方法(函数)
class Animal(object):
name = 'lili'
age = 1
def edit(self, name, age):
self.name = name
self.age = age
cat = Animal()
cat.edit('rol', 2)
print cat.name, cat.age # print 'rol' 2
print Animal.name, Animal.age # print 'lili' 1
也就是说这个默认添加的方法是一个实例的方法, 实例方法修改了实例的属性,而类的属性不改变
# 我们修改一下这个函数
def edit(self, name, age):
name = name
self.age = age
cat = Animal()
cat.edit('rol', 2)
print cat.name, cat.age # pirnt 'rol' 2
print Animal.name, cat.age # print 'lili' 1
说明实例方法不能修改类的属性, 但我想修改类的属性怎么办
# 再一次修改edit
@classmethod
def edit(cls, name, age):
cls.name = name
cls.age = age
cat = Animal()
cat.edit('rol', 2)
print cat.name, cat.age # print 'rol' 2
print Animal.name, Animal.age # print 'rol' 2
这里需要注意的是edit函数的第一个参数有self变为cls, python中建议大家在类的方法中使用cls而实例方法的参数为self, 而且这里说明了实例可以使用类的方法(函数)
那么我在给这个类添加init方法来初始化属性
class Animal(object):
name = 'lili'
age = 1
def __init__(self, name, age):
self.name = name
self.age = age
...
cat = Animal('kuku', 4)
cat.edit('rol', 2)
print cat.name, cat.age # print 'kuku' 4
print Animal.name, Animal.age # print 'rol' 2
添加__init__以后, cat不再使用类的属性,而修改了edit方法也没有改变cat实例的属性.
# 添加staticmethod
@staticmethod
def say_name(name=None):
if not name:
name = self.name
print 'my name is %s.' % name
cat = Animal('kaka', 3)
cat.say_name()
# 运行的话会报 NameError: global name 'self' is not defined
# 那是不是没给他添加self字段, 所以没找到
def say_name(self, name=None):
...
cat.say_name()
# TypeError: say_name() takes at least 1 argument(0 given), 显示缺少参数
这说明staticmethod 不能使用实例的属性和方法, 当然也使用不了类. 那么反过来呢
# 我们修改一下代码
# 先创建一个实例的方法, 他使用类的staticmethod
@staticmethod
def say_name(name):
print 'my name is %s.' % name
def say(self):
self.say_name(self.name)
@classmethod
def _say(cls):
cls.say_name(cls.name)
cat = Animal('kaka', 3)
cat.say()
cat._say()
可以通过类方法和实例方法访问staticmethod.
总结一下:
静态方法(staticmethod)
静态方法不能使用实例的属性和方法
静态方法不能使用类的属性和方法
静态方法可以通过类或实例调用
静态方法等于作用域在类中的全局函数
类方法(classmethod)
类方法可以使用类的属性和方法
类的方法可以使用静态方法
类的方法可以通过类或实例调用
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA 备考干货:Python 在数据分析中的核心应用与实战技巧 在 CDA 数据分析师认证考试中,Python 作为数据处理与分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 检验:数据趋势与突变分析的有力工具 在数据分析的广袤领域中,准确捕捉数据的趋势变化以及识别 ...
2025-07-08备战 CDA 数据分析师考试:需要多久?如何规划? CDA(Certified Data Analyst)数据分析师认证作为国内权威的数据分析能力认证 ...
2025-07-08LSTM 输出不确定的成因、影响与应对策略 长短期记忆网络(LSTM)作为循环神经网络(RNN)的一种变体,凭借独特的门控机制,在 ...
2025-07-07统计学方法在市场调研数据中的深度应用 市场调研是企业洞察市场动态、了解消费者需求的重要途径,而统计学方法则是市场调研数 ...
2025-07-07CDA数据分析师证书考试全攻略 在数字化浪潮席卷全球的当下,数据已成为企业决策、行业发展的核心驱动力,数据分析师也因此成为 ...
2025-07-07剖析 CDA 数据分析师考试题型:解锁高效备考与答题策略 CDA(Certified Data Analyst)数据分析师考试作为衡量数据专业能力的 ...
2025-07-04SQL Server 字符串截取转日期:解锁数据处理的关键技能 在数据处理与分析工作中,数据格式的规范性是保证后续分析准确性的基础 ...
2025-07-04CDA 数据分析师视角:从数据迷雾中探寻商业真相 在数字化浪潮席卷全球的今天,数据已成为企业决策的核心驱动力,CDA(Certifie ...
2025-07-04CDA 数据分析师:开启数据职业发展新征程 在数据成为核心生产要素的今天,数据分析师的职业价值愈发凸显。CDA(Certified D ...
2025-07-03从招聘要求看数据分析师的能力素养与职业发展 在数字化浪潮席卷全球的当下,数据已成为企业的核心资产,数据分析师岗位也随 ...
2025-07-03Power BI 中如何控制过滤器选择项目数并在超限时报错 引言 在使用 Power BI 进行数据可视化和分析的过程中,对过滤器的有 ...
2025-07-03把握 CDA 考试时间,开启数据分析职业之路 在数字化转型的时代浪潮下,数据已成为企业决策的核心驱动力。CDA(Certified Da ...
2025-07-02CDA 证书:银行招聘中的 “黄金通行证” 在金融科技飞速发展的当下,银行正加速向数字化、智能化转型,海量数据成为银行精准 ...
2025-07-02探索最优回归方程:数据背后的精准预测密码 在数据分析和统计学的广阔领域中,回归分析是揭示变量之间关系的重要工具,而回 ...
2025-07-02CDA 数据分析师报考条件全解析:开启数据洞察之旅 在当今数字化浪潮席卷全球的时代,数据已成为企业乃至整个社会发展的核心驱 ...
2025-07-01深入解析 SQL 中 CASE 语句条件的执行顺序 在 SQL 编程领域,CASE语句是实现条件逻辑判断、数据转换与分类的重要工 ...
2025-07-01SPSS 中计算三个变量交集的详细指南 在数据分析领域,挖掘变量之间的潜在关系是获取有价值信息的关键步骤。当我们需要探究 ...
2025-07-01CDA 数据分析师:就业前景广阔的新兴职业 在当今数字化时代,数据已成为企业和组织决策的重要依据。数据分析师作为负责收集 ...
2025-06-30探秘卷积层:为何一个卷积层需要两个卷积核 在深度学习的世界里,卷积神经网络(CNN)凭借其强大的特征提取能力 ...
2025-06-30