Python编程14:面向对象编程(二)

有两种类型的 ——类的变量和对象的变量,它们根据是类还是对象 拥有 这个变量而区分。

类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。

(有点像C++类的静态变量)

对象的变量 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。

#FileName:mClass.py

class MyName():
    #定义类变量
    count = 0
    
    #类初始化函数
    def __init__(self,name,t):
        self.Name = name
        print('初始化Name %s'%self.Name)
        MyName.count += 1
        self.__male = t
        
    #类释放函数    
    def __del__(self):
        print('Say by %s'%self.Name)
        MyName.count -= 1
        if MyName.count == 0:
            print('我是最后一个对象实例')
        else:
            print('仍然还有%d对象实例'%MyName.count)
    
    #定义类内部方法 Hell   
    def Hell(self):
        print('您好!我叫%s'%self.Name)        
        #在类的方法中的更改私有变量的值
        self.__male = not self.__male
    
    def classVar(self):
        print('%s说:类变量的值为:%d'%(self.Name,MyName.count))
        
    def isMale(self):
        if self.__male == True:
            print('%s我是个男人'%self.Name)
        else:
            print('我是个女人')
            
            
#创建对象实例
first = MyName("Zhang Jie",True)
#调用方法
first.Hell()
first.classVar()
first.isMale()

#更改对象变量的值
first.Name = 'jiezhj'
print('改变对象变量值后---------')
first.Hell()

print('-----------------------------')
second = MyName('Sun Li',False)
second.Hell()
second.classVar()
second.isMale()

#使用'__'定义的对象变量为私有变量,在类外部无法修改(以下值没有发生改变)
print("修改属性__male后------------------")
second.__male = True
second.isMale()

print('以下调用__del__函数————————————————')


 就如同__init__方法一样,还有一个特殊的方法__del__,它在对象消逝的时候被调用。对象消逝即对象不再被使用,它所占用的内存将返回给系统作它用

 Python中所有的类成员(包括数据成员)都是 公共的 ,所有的方法都是 有效的


只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__male,Python的名称管理体系会有效地把它作为私有变量。


这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。

__del__方法相当于C++中的析构函数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值