创建自己的对象是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)返回对象的类型
7万+

被折叠的 条评论
为什么被折叠?



