Python菜鸟学习手册09----面向对象续

在上一章中已经介绍了Python类的基本内容。我们将进一步拓展,以便能实际运用对象和类。

特殊的方法

__init__方法

__init__方法在类的一个对象被建立时,马上运行。你可以利用这个方法对对象进行初始化。__init__方法类似于C++、C#和Java中的 constructor 。(注意:init的两边各有两条下划线)
class Person:
    def __init__(self, name):                               #在__init__中初始化name
        self.name = name
    def sayHi(self):
        print ("大家好,我是人贱人爱的", self.name)
p = Person("王尼玛")
p.sayHi()

__del__方法

__del__在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用。__del__方法与 destructor 的概念类似。
class Person:
    '''Represents a person.'''                       #通过Person.__doc__查看
    population = 0

    def __init__(self, name):
        '''Initializes the person's data.'''         
        self.name = name
        print ('(Initializing %s)' % self.name)      #格式化输出字符串.

        # When this person is created, he/she
        # adds to the population
        Person.population += 1                       #类的变量在引用的时候是 类名.类变量

    def __del__(self):
        '''I am dying.'''
        print ('%s says bye.' % self.name)

        Person.population -= 1

        if Person.population == 0:
            print ('I am the last one.')
        else:
            print ('There are still %d people left.' % Person.population)

    def sayHi(self):                                 #可通过Person.sayHi.__doc__查看
        '''Greeting by the person.

        Really, that's all it does.'''
        print ('Hi, my name is %s.' % self.name)

    def howMany(self):
        '''Prints the current population.'''
        if Person.population == 1:
            print ('I am the only person here.')
        else:
            print ('We have %d persons here.' % Person.population)

swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany()

kalam = Person('Abdul Kalam')
kalam.sayHi()
kalam.howMany()
print(kalam.name)                                    #对象变量

swaroop.sayHi()
swaroop.howMany()
print(swaroop.name)                                        
输出
(Initializing Swaroop)
Hi, my name is Swaroop.
I am the only person here.
(Initializing Abdul Kalam)
Hi, my name is Abdul Kalam.
We have 2 persons here.
Abdul Kalam
Hi, my name is Swaroop.
We have 2 persons here.
Swaroop

小提示

1.类成员的访问权限

Python中所有的类成员都是公共的,所有的方法都是有效的
只有一个例外:如果你使用的数据成员名称以双下划线前缀比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
还有这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。

2.类的变量与对象的变量

类的变量:由一个类的所有对象(实例)共享使用。当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。( 类名.类变量)
对象的变量:由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。(对象名.变量)

3.print的格式化输出

支持参数格式化,与C语言的printf类似。
>>> strHello = "the length of (%s) is %d" %('Hello World',len('Hello World'))
>>> print (strHello)
输出
the length of (Hello World) is 11
>>> print("你好我的名字是%s,我今年%d岁了!" % ("王尼玛",2))                    #注意,字符串与后面变量之间没有逗号!
输出
你好我的名字是王尼玛,我今年2岁了!


上一讲: Python菜鸟学习手册08----面向对象的基本概念
下一讲: Python菜鸟学习手册10----文件的输入与输出


如果有什么疑问欢迎到我的微信公众号提问~

你可能感兴趣的:(Python)