类及对象

在类中一开始声明成员不加'self',可将其理解为类成员,访问使用 类名或者实例名字.变量

def MemberCounter:
    member = 0
    def __init__(self):
        MemberCount.members += 1

m1 = MemberCounter()
print MemberCounter.member

Output: 1

m2 = MemberCounter()
print MemberCounter.member

Output: 2
类成员变量是不可变(字符串,元组, 数字变量等)或者可变(列表,字典等)在类内部使用的区别
#!/usr/bin/env/ python
# -*- coding: utf-8

class MemberCounter:
    members = 0
    objlist = []
    objturple = (3,)
    def __init__(self):
            #此处只能用MemberCounter.members
        MemberCounter.members += 1
                #此处使用self.objlist或者MemberCounter.objlist均可
        self.objlist.append('1')

m1=MemberCounter()
print MemberCounter.members, MemberCounter.objlist
print m1.members, m1.objlist

m2=MemberCounter()

print MemberCounter.members,MemberCounter.objlist
print m2.members, m2.objlist

输出:

1 ['1']
1 ['1']
2 ['1','1']
2 ['1','1']

但是在外部使用的时候采用'类名或者实例名字.变量'的形式(如MemberCounter.objlist),两者的区别应该和他们做函数参数的原理类似,在列表/字典做函数参数的时候,函数可以改变实参的值,但是字符串或者数字变量等作为函数参数时,在函数使用会拷贝副本,外部的变量保持原值.

类作用域的变量可以被所有的实例访问,但是在实例中重新绑定members?

m1.members = "Two"
print m1.members
print m2.members

输出:
Two
2

新的numbers被写到了m1特性中,相当于创建了m1中的self.members, 屏蔽了类范围内的变量.

Note:

1.python能够改变变量作用域的代码段是def、class、lamda.
2.if/elif/else、try/except/finally、for/while 并不能涉及变量作用域的更改,也就是说他们的代码块中的变量,在外部也是可以访问的

继承

检查继承 eg:issubclass(SPAMFilter, Filter)
得到类的基类: SPAMFilter.__bases__
检查一个对象是否为一个类的实例: isinstance()
对象属于那个类 : s.__class__ 或者type(s) 
查看对象所存储的值:使用__dict__特性

多重继承

eg:class TalkingCalculator(Talker,Calculator):pass
如果一个类从多个超类继承(具有两个相同名字的不同方法),需要注意一下超类的顺序:先继承的类中的方法会重写后继承类的方法.

转载于:https://www.cnblogs.com/rogerjin/p/7060915.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值