python面向对象以及三大特性的初步理解
python简单的创建对象
class test(object):
#加(object)是默认继承object对象,否则不会继承object对象
#所以加()就是继承,否则就是不继承
def __init__(self,name):
#init方法是构造方法,在创建对象的时候会自动调用,如果类中定义了则使用类中定义的,
#如果没定义则使用的是object类中自带的,第一个参数必须为self,self是
self.name=name
def getName(self):
#python类中函数第一个参数为self
print self.name
return self.name
if __name__ == '__main__':
t1 = test("jack")
#实例化对象
t1Name = t1.getName()
print t1.name
print t1Name
print t1 #打印实例化后对象的地址
封装
- 个人理解封装的关键是private,protected字段,然后再加上get,set方法就可以了
- private: __name protected:_name public: name
class test(object):
def __init__(self,name):
self.__name = name
#如果不加__则会在外部也可以直接访问name属性
def getName(self):
return self.__name
if __name__ == '__main__':
t1 = test("dsad")
print t1.getName()
- 使用property注解
class test(object):
@property
def name(self):
return self.__name
@name.setter
def name(self,name):
self.__name = name
if __name__ == '__main__':
t1 = test()
t1.name ="asd"
print t1.name
特殊方法:
1.(what)什么是特殊方法:__xx__表示的是特殊属性或者方法,不要定义这类变量名,这是python内部定义的变量名
2.(how)如何使用:一般不用我们自己调用,在某些情况下会自动调用,例如,object[key]会触发 特殊方法getitem (self, value)运行,object[key]=value会触发 特殊方法setitem(self,key,value)运行,但是在继承抽象基类时候可能需要实现某些基类方法
继承
和java的继承感觉基本一致,没什么区别
多态
- python的多态特性是不会体现在方法重载的,应为python语言整个不关注其传递的参数的数据类型的,是可以直接统一使用的,并不会像java一样进行方法重载,也就是你无论传递什么数据类型,python其本身是可以统一进行数据管理的,不会影响其操作
- 但是方法重写是可以的
class test(object):
def run(self):
print "测试1"
class testDouble(test):
def run(self):
print "测试2"
class testThird(test):
pass
if __name__ == '__main__':
t1 = test()
t2 = testDouble()
t3 = testThird()
t1.run()
t2.run()
t3.run()