Python基础——6面向对象编程

类和实例

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

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__先后都有双下划线的变量时特殊变量,函数能够直接访问,注意私有变量不要这样定义。blog

私有变量跟前面的内部变量仍是有区别的,由于前边只加一个下划线的变量属于内部变量,原则上仍是能够被外部变量访问的。继承

继承和多态

子类定义能够继承父类,而且能够在父类的基础上作修改,从而体现多态性。get

例子:input

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

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

获取对象信息

isinstance(‘123’,str) class

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)
相关文章
相关标签/搜索