Python中的对象

来源:互联网 发布:软件定制开发协议 编辑:程序博客网 时间:2024/06/07 01:17

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

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

          obj = ClassType()

class person:    def setName(self,name):        self.name=namefoo = 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.singbirdsong()>>>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 funcPublic func
(5)类的命名空间

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

class MemberCounter:    members = 0    def init(self):        MemberCounter.members += 1 #给公共空间赋值obj1 = MemberCounter()obj2 = MemberCounter()obj1.init()obj2.init()print (obj1.members) #访问的是MemberCounter类的公共空间membersprint (obj2.members) #访问的是MemberCounter类的公共空间membersobj1.members = 4  #obj1的members屏蔽了MemberCounter类的空间membersprint (obj1.members) #访问的是obj1的自己的members空间print (obj2.members) #访问MemberCounter类公共空间members,因为为屏蔽>>>2242

(6)一些有用的函数

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

class Father:passclass Son(Father):passprint (Son.__base__)      >>><class '__main__.Father'>

__class__ 特性,对象属于哪个类

class Object:passobj = 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)返回对象的类型