
Python是一种面向对象的高级编程语言. 在Python中,“一切都是对象”: 数字,字符串,元组,列表,字典,集合和其他内置数据类型以及函数,方法,类,模块都是对象.
语言本身提供了上述基本对象,但是在实际编程中,我们希望创建各种对象,而Python为我们提供了一种创建自己的对象的方法: 类.

Class(类)是组合数据和功能的方法. 它允许我们创建一种新的对象类型并创建该类型的新实例. 类组合的数据是保存其自身状态的属性,而组合的函数(功能)是更改其状态的方法(在类中定义). 在类中定义的函数称为类方法.
Python中的类与其他语言(例如C ++)具有许多相似的功能,但有一些区别. 如果您已经了解其他语言中类的概念,则可以在学习Python类时进行一些比较. 如果您没有学过其他语言,那就没关系了. 学习之后,您会发现类的概念是如此简单.
类的定义由关键字class实现. 以下是最简单的类的定义:
class ClassName:
语句1
...
语句n
这种形式与函数的定义(def语句)非常相似吗?因为该类是数据和函数的组合,所以语句1可以是内部变量(数据)的定义和赋值,也可以是内部方法(函数)的定义. 类中的函数定义通常具有特殊形式的参数列表,该列表在方法调用的约定中指定. 这种特殊形式是第一个参数必须为self,稍后将对其进行详细说明.
输入类定义时,将创建一个新的命名空间并将其用作本地作用域. 因此,所有对局部变量的分配都在此新名称空间中进行. 特别是,函数定义将在此本地范围内绑定到新的函数名称.
通常(从末尾)离开类定义时,将创建一个类对象. 它基本上是对由类定义创建的名称空间的内容的包装. 元素的局部作用域(在输入类定义之前起作用)将恢复其作用,并且类对象将在此处绑定到类定义标头中给出的类名称(上例中为ClassName).

类对象(例如上例中的ClassName)支持两种操作: 属性引用和实例化.
属性引用的语法与Python中所有属性引用的语法相同: obj.name. 创建类对象时,类名称空间中存在的所有名称都是有效的属性名称. 以下是包含数据和方法的简单类定义:
class YuanRenXue:
"""A demo of class"""
name = '猿人学'
def say_hi(self):
print('Hello world!')
此类的有效属性引用为: YuanRenXue.name和YuanRenXue.say_hi,它们分别返回字符串和函数对象.
还可以分配类属性,因此您可以通过分配来更改Yuanrenxue.name的值.
______类也是有效的属性,对其的引用将返回该类的文档字符串: “类的演示”.
类实例化是函数符号的使用,可以将其视为返回新类实例的函数. 例如,上述类对象的实例为:
yrx = YuanRenXue()
这将创建该类的新实例,并将单词object分配给局部变量yrx.
实例化操作可以视为“调用”对象. 但是我们所有人都希望在创建类实例时进行一些初始化操作. 对于此类定义,我们可以定义一个名为__init __()的特殊方法. 它是类实例化的初始化方法,类似于C ++语言中的构造函数.

def __init__(self):
self.data = None
定义__init __()方法后,该类的实例化将自动调用此方法.
当然,__init __()方法还可以具有其他(除了self之外)参数,以实现更灵活的初始化操作. 实例化类对象时传递的参数(“调用”类对象)将传递给__init __()方法. 例如:
In [27]: class Point:
...: def __init__(self, x, y):
...: self.x = x
...: self.y = y
...:
In [28]: p = Point(7, 8)
In [29]: p.x, p.y
Out[29]: (7, 8)
实例化该类之后,我们获得了实例对象,对其进行的操作是: 属性引用. 有效的属性名称是数据属性和方法.
o
数据属性,对应于C ++中的“数据成员”,如果您不了解C ++则无所谓,“数据成员”这个名字实际上非常生动. 数据属性不需要声明. 首次分配时,它像普通变量一样生成. 例如,p是该语句创建的Point的实例,下面的代码将打印值8:
p.times = 1
while p.times < 5:
p.times = p.times * 2
print(p.times)
del p.times
尽管在定义类时未声明p.times(不需要声明数据属性),但是我们可以随时为实例分配一个新的data属性(这里是p.times)并可以删除实例随时具有数据属性(del p.times).
The

方法是“下属”对象的功能. 术语方法不是类实例所独有,其他对象也可以具有方法. 例如,列表对象具有append(),insert(),sort()和其他方法.
实例对象的有效方法名称取决于它所属的类. 根据定义,功能对象在类中的所有属性都定义了其实例的相应方法. 因此,在我们的示例中,yrx.say_hi是有效的方法引用,因为YuanRenXue.say_hi是函数;因此, yrx.name不是方法,因为YuanRenXue.name不是函数. 这里应该注意yrx.say_hi和YuanRenXue.say_hi不是同一件事. 它是一个方法对象,而不是一个函数对象. 一般来说,前者是实例的方法python 类,而后者是类的函数.
通常,调用该方法的方法是:
yrx.say_hi()
在YuanRenXue示例中,这将打印字符串Hello World. 但是,调用方法也可以更改为另一种形式,将其分配给变量,然后再调用它. 例如:
yrx_say = yrx.say_hi
yrx_say()
当我们调用不带参数的yrx.say_hi()时,但是say_hi()函数定义了一个参数. 实际上,该方法的特殊之处在于python 类,实例对象将作为函数的第一个参数(自身)传入. 调用yrx.say_hi()实际上等效于YuanRenXue.say_hi(yrx).
通常,类变量用于类的所有实例共享的属性和方法,而实例变量用于每个实例的唯一数据:
In [33]: class Tiger:
...: kind = 'feline'
...: def __init__(self, name)
File "<ipython-input-33-16aa1a5937d1>", line 3
def __init__(self, name)
^
SyntaxError: invalid syntax
In [34]: class Tiger:
...: kind = 'feline'
...: def __init__(self, name):
...: self.name = name
...:
In [35]: a = Tiger('Kiro')
In [36]: b = Tiger('Zim')
In [37]: a.kind
Out[37]: 'feline'
In [38]: b.kind
Out[38]: 'feline'
In [39]: a.name
Out[39]: 'Kiro'
In [40]: b.name
Out[40]: 'Zim'
如果类变量是诸如列表或字典之类的变量对象,则将导致令人惊讶的结果. 我们需要了解此结果,以便我们可以在需要时使用此功能,而在不需要时可以避免使用此功能. . 这全都是权衡取舍,这全是我们要在编程期间定义的类的作用. 下面,让我们看看这个“令人惊讶”的结果是什么

In [42]: class Tiger:
...: places = []
...: def __init__(self, name):
...: self.name = name
...: def go_place(self, place):
...: self.places.append(place)
...:
In [43]: a = Tiger('Kiro')
In [44]: b = Tiger('Zim')
In [45]: a.go_place('北京')
In [46]: b.go_place('上海')
In [47]: a.places
Out[47]: ['北京', '上海']
在这里,地点被定义为一个类变量,它记录了Tiger(Kiro和Zim,以及随后实例化的各个老虎)所访问过的所有地点. a检查地点,然后看上海. 这就是变量对象作为类变量的特征. 如果我们只想记录所有Tiger实例对象的位置,那么这种用法就是正确的.
如果我们只想记录每只老虎去过的地方,则应将位置定义为实例变量,即在__init __()中初始化赋值.
(1)数据属性将覆盖具有相同名称的方法属性,因此为避免在编写程序时发生名称冲突,可以使用某些规范来减少冲突,例如:
这些规范称为“代码规范”. 良好的代码规范可以使代码更具可读性,并且需要团队合作. 著名的Python代码规范是“ PEP 8”和Google的Python样式规范.
(2)数据属性可以由方法和对象之外的任何用户(使用此类的人)引用. 换句话说,Python没有像C ++类这样的私有成员,并且Python没有强制隐藏数据的对象.
(3)类对象的用户应谨慎使用数据属性. 直接操作数据属性可能会破坏固定变量. 但是我们可以考虑为实例对象添加自己的数据属性,但要避免与原始名称冲突.
(4)该方法的第一个参数通常称为self,它表示实例对象. 但这只是每个人都普遍同意的协议. 您可以用任何单词替换它,但是对于天然气程序员来说,您的代码将很难阅读,并且还会使VS Code等编辑器感到困惑.
类是一种将数据和功能组合在一起的方法,其中:
定义一个类后,我们创建一个类对象. 类对象支持两种操作: 属性引用和实例化.
实例化类对象后,将获得实例对象. 它具有两个属性名称: 数据属性和方法.
类变量是所有类实例共享的属性和方法,实例变量是每个实例的唯一数据.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-213407-1.html
美国的航母战斗群在台湾海峡一横就能执行自己意志的时代一去不复返了
但每个国家都有一些不好的地方