Python中的对象

        创建自己的对象是Python的核心概念之一。Python被称为面向对象的语言。

(1)如何创建自己的类。通过self参数具体绑定到对象上,所以一般类的成员函数都有一个self参数。创建类的方式:

          obj = ClassType()

class person:
    def setName(self,name):
        self.name=name
foo = person()
foo.setName('lsj')
person.setName(foo,'lsj') ##跟上面这句话是一样的功能,只是没有使用自动绑定
print (foo.name)

【注】在调用一个实例的时候,该方法的self参数被自动的绑定到实例上。即foo.setName('lsj')语句中的foo对象被自动的绑定到setName中的self参数上。换句话说,如果不通过实例调用类的成员函数,此时就没有参数被绑定self上,此时需要提供self参数,所以person.setName(foo,‘lsj’)跟上面实现的功能是一样的。

【注】通过类直接调用类的方法叫作未绑定方法。


(2)变量可以绑定到类的方法上,这个Python特有。

class Bird:
    song = 'love'
    def sing(self):
        print (self.song+'!')
bird = Bird()
bird.sing()
birdsong = bird.sing
birdsong()
>>>love!
love!

(3)指定超类,并且同时可以拥有多个超类。在多重继承的时候,注意各超类的顺序。因为如果超类中具有相同名字的成员时,在继承列表前面的超类会覆盖后面的超类。

class Calculator:
    def cal(self,exp):
        self.value = eval(exp)
class Talker:
    def talk(self):
        print ('Hi,my value is',self.value)
class TalkingCal(Calculator,Talker):
    pass #空语句
tc = TalkingCal()
tc.cal('1+3*3')
tc.talk()
>>>Hi,my value is 10

(4)类的成员如何转化为私有,在类的成员函数或者属性名字前面加双下划线就可以转化为私有。具体内幕就是Python将带下划线的成员名字给改了,加了一个_Secretive。

class PrivateClass:
    def __privateFunc(self):
        print ('Private func')

    def publicFunc(self):
        self.__privateFunc()
        print ("Public func")
obj = PrivateClass()
obj.publicFunc()
>>>Private func
Public func
(5)类的命名空间

对象的空间可以屏蔽类的公共空间。

class MemberCounter:
    members = 0
    def init(self):
        MemberCounter.members += 1 #给公共空间赋值

obj1 = MemberCounter()
obj2 = MemberCounter()
obj1.init()
obj2.init()
print (obj1.members) #访问的是MemberCounter类的公共空间members
print (obj2.members) #访问的是MemberCounter类的公共空间members
obj1.members = 4  #obj1的members屏蔽了MemberCounter类的空间members
print (obj1.members) #访问的是obj1的自己的members空间
print (obj2.members) #访问MemberCounter类公共空间members,因为为屏蔽
>>>2
2
4
2

(6)一些有用的函数

        __bases__   特性,可以求出一个类的超类。

class Father:pass
class Son(Father):pass
print (Son.__base__)      
>>><class '__main__.Father'>

__class__ 特性,对象属于哪个类

class Object:pass
obj = Object()
print (obj.__class__)   
>>><class '__main__.Object'>	

        callable(object) 确定对象是否可以被调用

        getattr(object,name[,default]) 确定特性的值,可选择提供默认值

        hasattr(object,name) 确定对象是否具有给定属性

        isinstance(object,class) 确定对象是否是类的实例

        issubclass(A,B) 确定A是不是B的子类

        random.choice(sequence)从非控序列中随机选择元素

        setattr(object,name,value)设定对象给定特性的value

        type(object)返回对象的类型


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值