博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python基础——6面向对象编程
阅读量:5076 次
发布时间:2019-06-12

本文共 2323 字,大约阅读时间需要 7 分钟。

类和实例

类是抽象的模版,例如汽车;而实例则是拥有相同方法的类的实现,例如汽车里面有大众、宝马、奔驰等等,这些车都能在地面上跑,但是它们的具体数据可以不一样。

calss Student(object)  #object是所有类的父类,如果没有继承的父类就填该类pass           #定义类是通过pass关键字,之后可以实例化具体的类calss Student(object)  #类的实例   def  __init__(self,name,age)#特殊函数__init__       self.name = name       self.age = age   def speak(self,word = ‘nihao’)      print(word + self.name)

python的实例是动态语言,所以允许用户自由绑定任何数据,例子:

student  =  Student(syz,18)student.score = 100

访问限制

对于不想让外部访问的变量或者数据,可以定义私有变量,变量前面添加两个下划线__name,那么将不能通过student.__name的方式直接访问,实现原理是在内部生成_Student__name变量代替__name变量,但是此时注意,不要认为调用student.__name  = syz的方式修改,因为此时相当于添加了一个__name的变量,而程序的self__的变量并没有变。

为了得到或者修改私有变量,需要定义修改函数或者获取函数

def set_name(self,name):    self.__name = namedef get_name(self):    return self.__name

注意:__abc__前后都有双下划线的变量时特殊变量,函数可以直接访问,注意私有变量不要这样定义。

私有变量跟前面的内部变量还是有区别的,因为前边只加一个下划线的变量属于内部变量,原则上还是可以被外部变量访问的。

继承和多态

子类定义可以继承父类,并且可以在父类的基础上做修改,从而体现多态性。

例子:

def Animal(object):    def run(self):        print(‘I’m running’)def Dog(Animal):def run(self):        print(‘A dog running’)    passdef Cat(Animal):def run(self):        print(‘A cat running’)    pass

鸭子类型,只要有相应的方法,就看做是类似的。只要会跑就把他看做鸭子

获取对象信息

isinstance(‘123’,str) 

True

getattr()   setattr()   hasattr()

# 首先你有一个command.py文件,内容如下,这里我们假若它后面还有100个方法class MyObject(object):    def __init__(self):        self.x = 9    def add(self):        return self.x + self.x    def pow(self):        return self.x * self.x    def sub(self):        return self.x - self.x    def div(self):        return self.x / self.x# 然后我们有一个入口文件 exec.py,要根据用户的输入来执行后端的操作from command import MyObjectcomputer=MyObject()def run():    inp = input('method>')    if inp == 'add':        computer.add()    elif inp == 'sub':        computer.sub()    elif inp == 'div':        computer.div()    elif inp == 'pow':        computer.pow()    else:        print('404')

上面使用了if来进行判断,那么假若我的command里面真的有100个方法,那我总不可能写100次判断吧,所以这里我们就会用到python的反射特性,看下面的代码

from command import MyObjectcomputer=MyObject()def run(x):    inp = input('method>')    # 判断是否有这个属性    if hasattr(computer,inp):    # 有就获取然后赋值给新的变量        func = getattr(computer,inp)        print(func())    else:    # 没有我们来set一个        setattr(computer,inp,lambda x:x+1)        func = getattr(computer,inp)        print(func(x))if __name__ == '__main__':    run(10)

  

转载于:https://www.cnblogs.com/SUNYZBlog/p/9634430.html

你可能感兴趣的文章
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>