类和实例

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

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 = name
def 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’)
pass def 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 MyObject
computer=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 MyObject
computer=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)

  

最新文章

  1. python下编译py成pyc和pyo
  2. win7远程桌面恢复全屏状态快捷键
  3. nodejs模块——fs模块
  4. mssqlserver 分日志(日志文件过大)
  5. SQL Server如何启用xp_cmdshell组件
  6. js 抽奖转盘实现
  7. python urllib urllib2
  8. C# Winform 获取天气情况
  9. SGU 194. Reactor Cooling(无源汇有上下界的网络流)
  10. Linux系统、版本、CPU、内存查看、硬盘空间
  11. java随机数与数组的使用。
  12. SQLServer批量备份与还原
  13. Tian Ji -- The Horse Racin
  14. (二)Hololens Unity 开发之 语音识别
  15. Java学习笔记之字符串常用方法
  16. docker的基本知识
  17. Visual Studio 2019 正式版 更新内容
  18. Bootstrap3基础 下载bootstrap3压缩包和相应的jQuery文件
  19. 【Teradata】配置PE和AMP(congfig和reconfig工具、vprocmanager)
  20. hive聚合函数和表生成函数

热门文章

  1. Python合并多个Excel数据
  2. 浅谈Web开发中的定时任务
  3. Chapter 5 Blood Type——31
  4. EF Core新增迁移时无法加载程序集“System.ValueTuple”的错误
  5. Django学习笔记(8)——前后台数据交互实战(AJAX)
  6. Spring Boot(十一)Redis集成从Docker安装到分布式Session共享
  7. 讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute
  8. Perl线程队列:Thread::Queue
  9. 记Android开发中的一些另类使用
  10. 设计模式之代理模式(Proxy)(2)