python 面向对象
类和对象 对象的抽象就是类 类是抽象的概念,而对象是具体的东西。 在面向对象编程的世界中,一切皆为对象,对象都有属性和行为,每个对象都是独一无二的,而且对象一定属于某个类。当我们拥有共同特征的对象的属性和行为都抽取出来后,就可以定义出一个叫做“类”的东西。
定义类 在Python中可以使用class关键字定义类,然后在类中用函数来定义方法
class Student(object): # __init__是一个特殊方法用于在创建对象时进行初始化操作 # 通过这个方法我们可以为学生对象绑定name和age两个属性 def __init__(self, name, age): self.name = name self.age = age def study(self, course_name): print('%s正在学习%s.' % (self.name, course_name)) # 名字用小写单词和下划线连接 def watch_tv(self): if self.age < 18: print('%s只能观看《熊出没》.' % self.name) else: print('%s正在观看岛国爱情动作片.' % self.name) #类中的函数,通常称为对象的方法 类创建好后,就可以创建和使用对象 def main(): # 创建学生对象并指定姓名和年龄 stu1 = Student('shuaige', 18) # 调用study方法 stu1.study('会替换类中的course_name') #正在学习会替换类中的course_name # 调用watch_tv方法 stu1.watch_tv() #默认参数 正在观看岛国爱情动作片shuaige stu2 = Student('ming', 1) stu2.study('math') #正在学习math stu2.watch_tv() # 只能观看《熊出没》ming if __name__ == '__main__': main()属性方法权限 Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果属性是私有的,在给属性命名时可以用两个下划线作为开头
class Test: def __init__(self, foo): self.__foo = foo def __bar(self): print(self.__foo) print('__bar') def main(): test = Test('hello') # AttributeError: 'Test' object has no attribute '__bar' test.__bar() # AttributeError: 'Test' object has no attribute '__foo' print(test.__foo) if __name__ == "__main__": main()Python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来“妨碍”对它们的访问,如果你知道更换名字的规则仍然可以访问到它们
class Test: def __init__(self, foo): self.__foo = foo def __bar(self): print(self.__foo) #hello print('__bar') #__bar def main(): test = Test('hello') test._Test__bar() print(test._Test__foo) #hello if __name__ == "__main__": main()在开发中,不建议将属性设置为私有的,这会导致子类无法访问
面向对象三个基本特征:封装、继承和多态。 封装:只向外界提供接口,把对数据的操作封装起来了,你并不知道数据怎么进行处理,只需要传入参数。 继承:可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展 多态:不同的子类对象,调用相同的父类方法,产生不同的执行结果,可以增加代码的灵活度