python篇 面向对象

1. 面向对象

1.1.面向对象概念

面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。 类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。 对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。 在面向对象的程序设计中,对象是组成程序的基本模块

1.2.面向对象可能用到的知识点


python篇 函数定义
python篇 递归概念
python篇 流程语句
python篇 匿名函数


2.类和对象

什么是类?-------类别

类通过关键字class进行定义类

对象-------类的实例,是一个真实存在的事物

定义类的注意:
通过class关键字定义,类里面可以去包含属性,可是是多个

类名命名规范:遵循大驼峰法

"""
定义一个用户类
class User:旧时类
class User(object):新式类
这两种定义方式都可以,都是继承了object这个对象,但推荐使用新式类
"""
class User(object):
    #重写object __init__(self).初始化方法,用来初始化属性
    def __init__(self):
        self.name = "张三"
        self.age = 18
        self.gender = "男"

    def Study(self):
        print("我张三爱学习法律!!!")

if __name__ == "__main__":
    u = User()
    print(u.name)
    u.age+=1
    print(u.age)
    print(u.gender)
    u.Study()

3.面向对象三大特征

3.1.封装

面向对象的封装特指,去将对象或者属性封装到一个类或者多个类中,需要使用的时候,通过对象调用对应的方法或者属性

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 + ""

    def get_username(self):
        return self.__username

    def set_username(self,username):
        self.__username=username


u1 = User("张三","18","男","12222")
print(u1)
u1.set_username("李四")
print(u1.get_username())


get和set方法

第二种封装: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 + ',' + "age = " + self.__age + "]"

    def get_username(self):
        return self.__username

    def set_username(self,username):
        self.__username=username

    username = property(get_username,set_username)


u1 = User("张三","18","男","12222")
print(u1.username)
u1.username = "lisi"
print(u1)
# print(u1)
# u1.set_username("李四")
# print(u1.get_username())


第三种:通过装饰器@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 + ',' + "age = " + self.__age + "]"
    @property
    def username(self):
        return self.__username

    @username.setter
    def username(self,username):
        self.__username=username

    # username = property(get_username,set_username)


u1 = User("张三","18","男","12222")
print(u1.username)
u1.username = "lisi"
print(u1)
# print(u1)
# u1.set_username("李四")
# print(u1.get_username())


3.2.继承

类和类之间存在继承关系

建立一个类,其中输入的object就是继承类

class User(object):
class RichMan(object):
    def __init__(self):
        self.money = 100000000
        self.company = "阿里巴巴"
    def tell_mottoo(self):
        print("我对钱不感兴趣")
    
class Son(RichMan):
    """继承里RichMan类"""
    pass
    
if __name__ == '__main__':
    s = Son() 
    s.money();
    print(s.company)

子类可以继承父类的方法和属性。
但能继承所有吗?------不可以
注意:继承父类并不是所有方法和属性都能继承,只能继承公开的属性和方法,私有的属性和方法是不能被继承的

私有方法和属性:
在命名前面加上“——”双下划线,但如果加上后,初始化

3.3.多态

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

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

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

4.方法重写

方法的重写,继承里面可以实现
方法重写又叫方法覆盖(Override):在继承基础之上,如果子类的方法,父类不能满足自己使用的时候,那么可以重写这个方法

注意:重写这个方法的时候,方法的名称、参数一定要和父类一致

下面为父类定义一个working,并重写

class RichMan(object):
    def __init__(self):
        self.money = 100000000
        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.working()
E:\py\python.exe D:/python/pyc/学习/继承.py
b

Process finished with exit code 0

5.某公司面试题

重写和重载的区别
重载:函数名称相同,但是函数的参数个数获类型不同

Python中有没有方法的重载(Overload)?有没有方法的重写(Override)?

好像有重载

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

    def working(self,x,y,z):
        print(x,y,z)

class Son(RichMan):
    """继承里RichMan类"""
    def working(self,x):
        print(x)

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

python中有方法的重写,但没有方法的重载,但是可以实现方法的重载(装饰器)

继承的本质:实现代码的复用,class Son(self,RichMan,Object)
python是支持多继承:

如果a类是继承b类和c类,b和c同时有一个h(),请问a继承的是哪个h()?

答,就近原则,按照继承的顺序来找(广度优先)

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

    def working(self):
        print("i am RichMan's son")

class Red(object):
    def working(self):
        print("i am red's son")

class Son(Red,RichMan):
    """继承里RichMan类"""
    # def working(self,name):
    #     print(name)

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

super关键字,是一个指针,指向父类

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

    def working(self):
        print("i am RichMan's son")



class Son(RichMan):
    """继承里RichMan类"""
    def working(self):
        print("i am i")

    def test(self):
        # self.working()
        super().working()



if __name__ == '__main__':
    s = Son()
    # print(s.money)
    # print(s.company)
    s.test()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值