面向对象 及 面向对象的三大特征

面向对象


    面向过程、面向对象
语言发展史:一代语言、二代语言()、(汇编语言、机器语言)、(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没有方法重载,但可以实现方法重载(装饰器)

多态(不重要):

         对象的多种状态,多态是基于继承的基础上,父类引用指向子类实例的现象叫多态。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值