深入解析Python类属性与实例化:从困惑到掌握的全过程

我对《深入Python》和《Python简明教程》中类属性的介绍感到非常困惑。经过几个小时痛苦的想象和实践,终于取得了一些小进步,写了一篇文章来帮助大家理解。使困惑。

深入解析Python类属性与实例化:从困惑到掌握的全过程

我的环境是python2.5

知识准备

你可以先看看这个链接:

Python中的类称为类对象,类的实例称为实例对象。

类类对象

类有两个操作,1.类属性属性引用2.实例化

类属性相当于属于某个类的变量(即某些语言中类的静态公共变量)。使用方法是:类名。类属性名称

实例化是创建类实例的一种方法。使用方法为:类名()

使用实例化方法后,将创建一个空的类实例。一般来说,Python类的定义中都会有一个专门的方法来进行初始化。这个方法就是__init__()。当调用类的实例化方法时,该类的实例将立即调用 __init__() 方法。也就是说,__init__()不是一个构造函数,而是一个普通的方法。

实例对象

类的实例只有一个操作,就是1.属性调用属性引用。

属性调用是指1.数据属性2.方法

数据属性

数据属性不需要预先定义!当数据属性第一次被使用时,它们被创建和分配(它们在第一次被分配时就出现)。请参阅下面的示例。

class="language-python">class Test:
    pass
t=Test()
t.name='notus'
print t.name 

我们没有在类Test中定义数据属性名称,但是可以直接在代码中使用。这是数据属性。

方法

我们暂时不讨论这个。

如何定义类的属性

现在,除了属性的广义解释之外,“属性”这个词在实际编程中也经常使用。 Python的类中有两种属性:类属性和数据属性。 (大多数编程语言都具有这两个属性。)。类属性属于类,数据属性属于类的实例。假设有一个类Test,这两个属性的一般用法是

Test.mode
t=Test()
t.name

那么什么时候应该定义这两个属性呢?

根据上面的讨论,数据属性不需要预先定义。当第一次使用数据属性时,会创建它并为其分配一个值。事实上,类属性也是如此。

因此,我们有下面的例子

class Test:
    pass
t=Test()
t.name='notus'
print t.name
Test.mode='auto'
print Test.mode

可以看到,类中​​并没有定义数据属性名和类属性模式。您所要做的就是在需要时使用它们。

如何预先分配属性

您可以在类的定义中使用属性。我们先看这个例子。

class Test:
    def ask(theInstance):
        theInstance.name='notus'
        Test.mode='auto'
##print Test.mode
t=Test()
##print t.name
t.ask()
print Test.mode
print t.name

类测试有一个方法询问。注意程序中被注释掉的两行。在使用ask()方法之前,运行这两行注释行中的任意一行都会出错,提示“class Test has no attribute...””。但是运行ask()之后,我们在ask()中初始化了这两个属性) 方法,操作通过。

注意ask()接收到的参数theInstance。这是程序中Test类的实例t。一般命名约定建议将此参数命名为 self。该参数是python自动传入的,所以不需要在程序中添加。中级通过。

如果要在类实例化后立即使用这些属性,则应在 __init__() 方法中初始化这些属性。正如前面提到的,__init__() 方法在类实例化后立即自动调用。 .所以我们的示例程序可以改成这样

class Test:
    def __init__(self):
        self.name='notus'
        Test.mode='auto'
##print Test.mode
t=Test()
##print t.name
print Test.mode
print t.name

所以你可以有这样的类定义

class Test:
    def __init__(self):
        self.name='notus'
        Test.mode='auto'
    def ask(self):
        self.date='2008'
##print Test.mode
t=Test()
##print t.name
print Test.mode
print t.name
##print t.date
t.ask()
print t.date

数据属性日期只能在调用ask()方法后才能使用。当然这个属性也可以这样使用

##print Test.mode
t=Test()
##print t.name
print Test.mode
print t.name
t.date='2007'
print t.date

日期数据属性是在程序中创建的。可以想象,当后面调用ask()方法时,数据属性date已经存在,但是它的值已经改变了。

属性无需方法即可初始化

看下面的示例程序

class Test:
    action='win the game'
print Test.action
t=Test()
print t.action
Test.action='at least 1 point'
print Test.action
print t.action
t.action='dont lose'
print Test.action
print t.action

运行结果如下

赢得比赛

赢得比赛

至少 1 分

至少 1 分

至少 1 分

不要输

这种现象可以概括为:“改变类属性,数据属性相应改变;改变数据属性,类属性不变”。原理我不懂,就不讲了。专家来解释一下:)

希望这篇文章能够帮助到迷茫的朋友们。

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

22阅读