面向对象
面向过程、面向对象
语言发展史:一代语言、二代语言()、(汇编语言、机器语言)、(c语言、c++、python 、java)
类和对象
类:类别,关键字class进行定义类
对象:类的实例,是一个正真实存在的事物
定义的类:
通过class关键字定义,类里面可以包含属性
类名命名规范:
遵循大驼峰法,UserName
定义一个用户类 User
class User: --------旧时类
class User(object):---------新式类
都是继承object对象,推荐使用后者
eg.
class User(object): #User类
def __init__(self):#init初始化属性,在构建方法的时候就会触发这个方法
self.name = "zs"
self.age = 18
self.gender = "男"
def study(self):
print("hello world")
if __name__ == '__main__':#主函数
u = User() #创建对象
print(u.name,u.age,u.gender)
u.age += 10 #修改属性值
print(u.age)
u.study() #调用study方法
一般在构建对象的时候,才确定属性值。
所以上面方法改为下面方法
class User(object): #User类
def __init__(self,name,age,gender):#初始化属性,在构建方法的时候就会触发这个方法
self.name = name
self.age = age
self.gender = gender
def study(self):
print("hello world")
print("你是"+self.name+"是老师")
def __str__(self):
return "[name="+self.name+",age="+str(self.age)+",gender="+self.gender+"]"
if __name__ == '__main__': #主函数
u = User("李四",18,"男")
print(u)
u.study()
面向对象的三大特征
封装、继承、多态
封装:
面向对象的封装,特指将属性和方法封装到一个类或者多个类中,在需要使用的时候,通过对象调用对应的属性或方法
1、get和set 获取私有属性
2、property(). 其中包含get和set方法
3、通过装饰器 @property 在get方法上进行装饰
1.eg
class User(object):
def __init__(self,name):
self.__name = name
def __str__(self):
return "姓名:"+self.__name
#get
def get_username(self):
return self.__name
#set
def set_username(self,name):
self.__name = name
if __name__ == "__main__":
u = User("刘扭六")
print(u)
print(u.get_username())
u.set_username("lisi")
print(u)
2.eg
class User(object):
def __init__(self,name):
self.__name = name
def __str__(self):
return "姓名:"+self.__name
#get
def get_username(self):
return self.__name
#set
def set_username(self,name):
self.__name = name
username = property(get_username, set_username)
if __name__ == "__main__":
u = User("刘扭六")
print(u.username) #调用 property 里的 get_username
u.set_username("lisi") #修改时,调用 set_username
print(u)
3.eg
class User(object):
def __init__(self,name):
self.__name = name
def __str__(self):
return "姓名:"+self.__name
@property #装饰器 指get方法
def username(self):
return self.__name
#||80行 username 与 83行 username 名字要一样
@username.setter
def usernme(self,name):
self.__name = name
if __name__ == "__main__":
u = User("刘扭六")
print(u)
print(u.username) #调的装饰器@property 里面的方法
u.usernme="lisi" #调的装饰器@username.setter 里面的方法
print(u)
继承:
类与类之间存在一种继承关系。
子类可以继承父类的属性和方法,(能继承所有的属性和方法吗?——不能,私有),即只能继承公开的
属性和方法,私有的属性和方法是不能被继承的。
python继承:实现代码的复用,python是支持多继承,class Son(man ,object,XXX,XXX)
注:子类只能继承公开的方法和属性。
问题:如果A类是基础B类和C类,B和C同时有一个H(),请问A继承的是哪个H()?
按照继承的顺序来找(广度优先)
super关键字:是一个指针,默认指向父类,如果有参数要加参数
重写(Override)
方法的重写,继承可以实现方法的重写。
方法重写(覆盖Override):在继承的基础上,如果父类的方法不能满足自己使用的时候,那么可以重写这个方法
注:方法重写时,方法名和参数要一致
重载(Overload)
方法的重载(Overload):函数名相同,但参数个数或类型不同
面试题: 重写和重载的区别:
结论:python没有方法重载,但可以实现方法重载(装饰器)
多态(不重要):
对象的多种状态,多态是基于继承的基础上,父类引用指向子类实例的现象叫多态。