面向对象(Python)

面向对象

一、面向对象

什么面向过程?什么是面向对象?
语言的发展史

二、类和对象

什么是类?-------类别 关键字class进行定义类
对象-------类的实例,是一个真实存在的事物
定义的类:
通过class关键字定义,类里面可以包含属性
类名的命名规范:遵循大驼峰法 user_name UserName

"""定义一个用户类User 
   class User: 旧时类 
   class User(object): 新式类 
   这两种定义方式都可以,都是继承了object对象,但是推荐适用新式类 
""" 

class User(object): 
    #需要重写object里面的__init__(self),初始化方法,用来初始化属性,在构建方法的时候就会触发这个方法
    def __init__(self,name,age,gender): 
         print("构建对象的时候被触发了") 
         self.name = "张三" 
         self.age = 18 
         self.gender = "男" 
    
    def study(self): 
        print("我爱学习!!") 

if __name__ == '__main__': 
     print("马上要触发") 
     u = User() 
     print("触发结束了") 
     print(u.name) 
     print(u.age) 
     u.age += 1 
     print(u.age) 
     u.study()

"""
  定义一个用户类User 
  class User: 旧时类 
  class User(object): 新式类 
  这两种定义方式都可以,都是继承了object对象,但是推荐适用新式类 
""" 
class User(object): 
    #需要重写object里面的__init__(self),初始化方法,用来初始化属性,在构建方法的时候就会触发这个方法
    #一般在构建的对象的时候,才确当属性值 
    def __init__(self,name,age,gender): 
        # print("构建对象的时候被触发了") 
        # self.name = "张三" 
        # self.age = 18 
        # self.gender = "男" 
        self.name = name 
        self.age = age 
        self.gender = gender 

    def study(self): 
        print("我爱学习!!") 
        print("我是"+self.name+"爱学习")
         
    def __str__(self): 
        #tostring是一样的  
        return "[name = "+self.name+",age = "+self.age+",gender = "+self.gender+"]" 

if __name__ == '__main__': 
# print("马上要触发") 
# u = User() 
# print("触发结束了") 
# print(u.name) 
# print(u.age) 
# u.age += 1 
# print(u.age)
# u.study() u = User("zhangsan","18","男") 
print(u) 
u.study() 
# print(u.name)

三、面向对象的三大特征

封装 继承 多态

1.封装

面向对象的封装特指的是将属性和方法封装到一个类或者多个类中,在需要使用的时候,通过对象。调用对用的方法或者属性
第一种方法:get和set方法

class User(object):
   def __init__(self,username,age,gender,tel): 
       self.__username = username 
       self.__age = age 
       self.__gender = gender 
       self.__tel = tel 
   def __str__(self): 
       return "name = "+self.__username+"" 

   #get方法 
   def get_username(self): 
       return self.__username 
   #set方法 
   def set_username(self,name): 
       self.__username = name 

u1 = User("zhangsan",18,"男","13128292927") 
print(u1) 
# print(u1.__username) 
print(u1.get_username()) 
u1.set_username("lisi") 
print(u1) 
# u1.age += 1 
# print(u1.age)

第二种方法:property()

class User(object): 
    def __init__(self,username,age,gender,tel): 
        self.__username = username 
        self.__age = age 
        self.__gender = gender 
        self.__tel = tel 
    def __str__(self): return "name = "+self.__username+"" 

    #get方法 
    def get_username(self): 
        return self.__username 

    #set方法 
    def set_username(self,name): 
        self.__username = name 
        
    username = property(get_username,set_username) 
u1 = User("zhangsan",18,"男","13128292927") 
print(u1.username) 
u1.username = "lisi" 
print(u1) 
# print(u1) 
# # print(u1.__username) 
# print(u1.get_username()) 
# u1.set_username("lisi")
# print(u1) 
# u1.age += 1 
# print(u1.age)

第三种方法:通过装饰器@property在get方法上进行装饰

class User(object): 
    def __init__(self,username,age,gender,tel): 
        self.__username = username 
        self.__age = age 
        self.__gender = gender 
        self.__tel = tel 
    def __str__(self): 
        return "name = "+self.__username+"" 
    @property 
    def username(self): 
        return self.__username
         
    @username.setter 
    def username(self,name): 
        self.__username = name 
        
    # username = property(get_username,set_username) 
u1 = User("zhangsan",18,"男","13128292927") 
print(u1.username) 
u1.username = "lisi" 
print(u1) 
# print(u1) 
# # print(u1.__username) 
# print(u1.get_username()) 
# u1.set_username("lisi") 
# print(u1) 
# u1.age += 1 
# print(u1.age)

2.继承

类与类之间也是存在一种继承的关系

class RichMan(object): 
    def __init__(self): 
        self.money = 10000000 
        self.company = "阿里巴巴" 

    def tell_motto(self): 
        print("我对钱不感兴趣")

class Son(RichMan): 
""" 继承RichMan类 """ 
    pass
if __name__ == '__main__': 
   s = Son() 
   print(s.money) 
   print(s.company)
子类可以继承父类的属性和方法,能继承所有的方法和属性吗?----不能

注意:继承父类并不是所有的方法和属性都能继承,只能继承公开的属性和方法,私有的属性和方
法是不能被继承的

class RichMan(object): 
    def __init__(self): 
        self.__money = 10000000 
        self.company = "阿里巴巴" 

    def tell_motto(self): 
        print("我对钱不感兴趣") 
    def __speak_english(self): 
        print("将英文很厉害,口语很不错") 

class Son(RichMan): 
    """ 继承RichMan类 """ 
    pass 

if __name__ == '__main__': 
    s = Son() 
    print(s.money) 
    print(s.company)
    s.tell_motto()

方法的重写,继承可以实现方法的重写
方法重写(覆盖 Override):在继承的基础之上,如果子类的方法父类不能满足自己使用的时候,那
么可以重写这个方法
注意:重写方法的时候,方法的名称、参数一定要和父类必须一致

class RichMan(object): 
    def __init__(self): 
        self.__money = 10000000 
        self.company = "阿里巴巴" 
    def tell_motto(self): 
        print("我对钱不感兴趣") 

    def __speak_english(self): 
        print("将英文很厉害,口语很不错") 

    def working(self):
        print("A员工表现的比较好") 

class Son(RichMan): 
    """ 继承RichMan类 """ 
    def working(self): 
        print("B员工表现的比较好") 

if __name__ == '__main__': 
    s = Son() 
    # print(s.money) 
    print(s.company) 
    s.tell_motto() 
    s.working()

面试题:python 中有没有方法的重载?有没有方法的重写?
方法的重载(Overload): 函数名称相同,但是函数的参数个数或者类型不同
结论:python中有方法的重写,但是没有方法的重载,但是可以实现方法的重载(装饰器)
继承的本质:实现代码的复用
Python是支持多继承,class Son(RichMan,object,XXX,XXXX)
那么如果A类是继承B类和C类,B和C同时有一个H(),请问A继承的是哪个H()?
按照继承的顺序来找(广度优先)
super关键字:是一个指针,默认指向的父类

class RichMan(object): 
    def __init__(self): 
        self.__money = 10000000 
        self.company = "阿里巴巴" 

    def tell_motto(self): 
        print("我对钱不感兴趣") 
    def __speak_english(self): 
        print("将英文很厉害,口语很不错") 
    def working(self): 
        print("A员工表现的比较好") 

class Son(RichMan,object): 
    """ 继承RichMan类 """ 
    def working(self): 
        print("B员工表现的比较好") 

    def test(self): 
        self.working()
        #super默认指向的是父类,如果有参数需要加上参数 
        super().working() 

if __name__ == '__main__': 
    s = Son() 
    # print(s.money) 
    # print(s.company) 
    # s.tell_motto() 
    # s.working() 
    s.test()

3.多态

多态(python中不重要):指的是对象的多种状态,多态是基于继承的基础之上,父类引用指向子类实例的现象叫做多态

ArrayList a1 = new ArrayList() 
List ls = new ArrayList()

注意:在弱数据类型语言中,因为不用声明数据类型,所以天生就支持多态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值