python的面向对象和以前学的c++,Java都是一般,大同小异,面向对象基础先谈谈类的构造,编写,属性和方法的可见性等等
1.定义类,创建和使用对象
#定义类 class Student(object): #类student的初始化方法 def __init__(self,name,age): self._name=name self._age=age def study(self,cname): print("%s正在学习:%s"%(self._name,cname)) def movie(self): if self._age <= 18: print("%s只能看熊大熊二!"%self._name) else: print("%s正在看爱情动作片!"%self._name) #创建和使用对象 def main(): student1=Student('wbb',21) student1.study('python程序设计') student1.movie() if __name__=='__main__': main()
2.属性和方法的可见性
Python在这个地方和其他语言还是有些区别的,其他语言可以设置属性为私有的(private)或者受保护的(protected),来限制对属性和方法的直接访问,但是python只有公有的和私有的,而且python中私有的只是一种形式,外界仍然可以访问到。所以,建议在python中将属性和方法的可见性定为公有的,但是你可以在属性名前加个单下划线,但这仅仅只是一种暗示,提醒你访问时要小心了,并不是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() print(test.__foo) 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') test._Test__bar() print(test._Test__foo) if __name__=='__main__': main()
运行结果如下图: