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)返回对象的类型
- python中的对象 一级对象?
- python中的函数对象
- Python中的对象
- Python中的数据对象
- python中的对象拷贝
- Python中的对象
- python中的面向对象
- python中的创建对象
- python中的可迭代对象
- python中的面向对象
- python中的面向对象
- python 中的面向对象
- Python 中的类和对象
- python中的对象和引用
- 关于python中的面向对象
- Python中的对象的排序
- python中的变量和对象
- Python 中的var_dump, 对象打印
- android 开发资源
- 利用DCC自动编译Delphi工程组文件
- 项目协作工具-JIRA使用笔记和相关资料
- error occurred during initialization of vm java/lang/noclassdeffounderror java/lang/object
- 使用CRectTracker类进行对象动态定位(一)
- Python中的对象
- 当在eclipse中的web工程中增加了extjs4,出现An internal error occurred during: "Building workspace".
- tomcat通过虚拟路径访问程序外部资源的问题
- HashMap原理
- 使用CRectTracker类进行对象动态定位(二)
- Kernel 中的 GPIO 定义和控制
- udev
- ruby on rails安装无反应
- Java 敏感字符处理类,功能非常强大