Python基础语法(十)

1. 面向对象

1. 定义类

  1. 语法
    # 类名要满足命名规则,遵循大驼峰命名规范
    class 类名():
        代码
    

2. 创建对象

  1. 语法
    对象名 = 类名()
    
  2. 示例
    class Number():
        def GetName(self):
            print("ccblogs")
    
    
    nb1 = Number()
    nb1.GetName()
    
    # 输出结果
    ccblogs
    

3. self

  1. self:调用该函数的对象
    class Number():
        def GetName(self):
            print(self)
    
    
    nb1 = Number()
    print(nb1)
    nb1.GetName()
    
    # 输出结果
    <__main__.Number object at 0x7f40a2c09640>
    <__main__.Number object at 0x7f40a2c09640>
    
  2. 一个类可以创建多个对象
    class Number():
        def GetName(self):
            print(self)
    
    
    nb1 = Number()
    print(nb1)
    nb1.GetName()
    
    print("*" * 20)
    
    nb2 = Number()
    print(nb2)
    nb2.GetName()
    
    # 输出结果
    <__main__.Number object at 0x7fe1764b5640>
    <__main__.Number object at 0x7fe1764b5640>
    ********************
    <__main__.Number object at 0x7fe1764a15b0>
    <__main__.Number object at 0x7fe1764a15b0>
    

4. 添加和获取对象属性

  1. 类外面添加对象属性
    对象名.属性名 =
  2. 类外面获取对象属性
    class Number():
        def GetName(self):
            print(self)
    
    
    nb1 = Number()
    nb1.age = 18
    print(nb1.age)
    
    # 输出结果
    18
    
  3. 类里面获取对象
    # 语法
    self.属性名
    
    # 示例
    class Number():
        def GetName(self):
            print(self.name)
    
    
    nb1 = Number()
    nb1.name = "ccblogs"
    nb1.GetName()
    
    # 输出结果
    ccblogs
    

5. 魔法方法

  1. __init__():初始化对象
    # 不带参数
    class Nb1():
        def __init__(self):
            self.name = "ccblogs"
            self.age = 18
    
        def print_nb(self):
            print(f"Name:{self.name}, Age:{self.age}")
    
    
    nb1 = Nb1()
    nb1.print_nb()
    
    
    # 带参数
    class Nb2():
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def print_nb(self):
            print(f"Name:{self.name}, Age:{self.age}")
    
    
    nb2 = Nb2("ccblogs", 19)
    nb2.print_nb()
    
    # 输出结果
    Name:ccblogs, Age:18
    Name:ccblogs, Age:19
    
  2. __str__():打印类的对象时,返回这个方法的return值。可以设置类的说明
    class Nb():
        def __str__(self):
            return "这是一个返回成员信息的类"
    
    
    nb = Nb()
    print(nb)
    
    # 输出结果
    这是一个返回成员信息的类
    
  3. __del__():删除类对象时,默认执行该方法
    class Nb():
        def __del__(self):
            print("del方法")
    
    
    nb = Nb()
    del nb
    
    # 输出结果
    del方法
    

6. 继承

  1. 经典类:不由任意内置类型派生出的类
    class 类名:
        代码
    
  2. 新式类
    class 类名(object):
        代码
    
  3. 继承的概念
    1. Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法。
    2. Python中,所有类默认继承object类,object类是顶级类或基类;其他子类叫做派生类。
    class Nb(object):
        def __init__(self):
            self.name = "ccblogs"
    
        def getName(self):
            print(self.name)
    
    
    class Cb(Nb):
        pass
    
    
    cc = Cb()
    cc.getName()
    
    # 输出结果
    ccblogs
    
  4. 单继承
    class Nb(object):
        def __init__(self):
            self.name = "ccblogs"
    
        def getName(self):
            print(self.name)
    
    
    class Cb(Nb):
        pass
    
    
    cc = Cb()
    print(cc.name)
    cc.getName()
    
    # 输出结果
    ccblogs
    ccblogs
    
  5. 多继承
    # 当一个类有多个父类的时候,默认使用第一个父类的同名属性和方法。
    class Nb1(object):
        def __init__(self):
            self.name = "ccblogs1"
    
        def get_name(self):
            print(self.name)
    
    
    class Nb2(object):
        def __init__(self):
            self.name = "ccblogs2"
    
        def get_name(self):
            print(self.name)
    
    
    class Cb(Nb2, Nb1):
        pass
    
    
    cc = Cb()
    print(cc.name)
    cc.get_name()
    
    # 输出结果
    ccblogs2
    ccblogs2
    
  6. 重写
    class Nb1(object):
        def __init__(self):
            self.name = "ccblogs1"
    
        def get_name(self):
            print(self.name)
    
    
    class Nb2(object):
        def __init__(self):
            self.name = "ccblogs2"
    
        def get_name(self):
            print(self.name)
    
    
    class Cb(Nb2, Nb1):
        def __init__(self):
            self.name = "ccblogs3"
    
        def get_name(self):
            print(self.name)
    
    
    cc = Cb()
    print(cc.name)
    cc.get_name()
    
    # 输出结果
    ccblogs3
    ccblogs3
    
  7. 查看父类层级关系
    class Nb1(object):
        def __init__(self):
            self.name = "ccblogs1"
    
        def get_name(self):
            print(self.name)
    
    
    class Nb2(object):
        def __init__(self):
            self.name = "ccblogs2"
    
        def get_name(self):
            print(self.name)
    
    
    class Cb(Nb2, Nb1):
        def __init__(self):
            self.name = "ccblogs3"
    
        def get_name(self):
            print(self.name)
    
    
    print(Cb.__mro__)
    
    # 输出结果
    # (<class '__main__.Cb'>, <class '__main__.Nb2'>, <class '__main__.Nb1'>, <class 'object'>)
    
  8. 子类调用父类同名属性和方法
    class Nb1(object):
        def __init__(self):
            self.name = "ccblogs1"
    
        def get_name(self):
            print(self.name)
    
    
    class Nb2(object):
        def __init__(self):
            self.name = "ccblogs2"
    
        def get_name(self):
            print(self.name)
    
    
    class Cb(Nb2, Nb1):
        def __init__(self):
            self.name = "ccblogs3"
    
        def get_name(self):
            self.__init__()
            print(self.name)
    
        def nb1_get_name(self):
            # 同名方法中使用了同名属性,所以需要调用下父类的init方法
            Nb1.__init__(self)
            Nb1.get_name(self)
    
        def nb2_get_name(self):
            Nb2.__init__(self)
            Nb2.get_name(self)
    
    
    cb = Cb()
    cb.get_name()
    cb.nb1_get_name()
    cb.nb2_get_name()
    cb.get_name()
    
    # 输出结果
    ccblogs3
    ccblogs1
    ccblogs2
    ccblogs3
    
  9. 多层继承
    class Nb1(object):
        def __init__(self):
            self.name = "ccblogs1"
    
        def get_name(self):
            print(self.name)
    
    
    class Nb2(object):
        def __init__(self):
            self.name = "ccblogs2"
    
        def get_name(self):
            print(self.name)
    
    
    class Cb(Nb2, Nb1):
        def __init__(self):
            self.name = "ccblogs3"
    
        def get_name(self):
            self.__init__()
            print(self.name)
    
        def nb1_get_name(self):
            # 同名方法中使用了同名属性,所以需要调用下父类的init方法
            Nb1.__init__(self)
            Nb1.get_name(self)
    
        def nb2_get_name(self):
            Nb2.__init__(self)
            Nb2.get_name(self)
    
    
    class Mb(Cb):
        pass
    
    
    mb = Mb()
    mb.get_name()
    mb.nb1_get_name()
    mb.nb2_get_name()
    mb.get_name()
    
    # 输出结果
    ccblogs3
    ccblogs1
    ccblogs2
    ccblogs3
    
  10. super()
    # 使用super()可以自动查找父类。调用顺序遵循__mro__类属性的顺序。比较适合单继承使用。
    class Nb1(object):
        def __init__(self):
            self.name = "ccblogs1"
    
        def get_name(self):
            print(self.name)
    
    
    class Nb2(Nb1):
        def __init__(self):
            self.name = "ccblogs2"
    
        def get_name(self):
            print(self.name)
            super().__init__()
            super().get_name()
    
    
    class Cb(Nb2):
        def __init__(self):
            self.name = "ccblogs3"
    
        def get_name(self):
            self.__init__()
            print(self.name)
    
        def nb2_get_name(self):
            # super(Cb, self).__init__()
            # super(Cb, self).get_name()
            # 也可以是下面的写法
            super().__init__()
            super().get_name()
    
    
    class Mb(Cb):
        pass
    
    
    mb = Mb()
    mb.get_name()
    mb.nb2_get_name()
    mb.get_name()
    
    # 输出结果
    ccblogs3
    ccblogs2
    ccblogs1
    ccblogs3
    

7. 私有权限

  1. 定义私有属性和方法
    # 为实例属性和方法设置私有权限,即设置某个实例属性或实例方法不继承给子类。
    # 设置私有权限的方法:在属性名和方法名前面加上两个下划线__
    class Nb1(object):
        def __init__(self):
            self.name = "ccblogs1"
            self.__pwd = "123456"
    
        def get_name(self):
            print(self.name)
    
        def __get_pwd(self):
            print(self.__pwd)
    
    
    class Nb2(Nb1):
        pass
    
    
    nb = Nb2()
    # nb无法调用Nb1里面的__pwd属性和__get_pwd()方法
    
  2. 获取和修改私有属性
    class Nb1(object):
        def __init__(self):
            self.name = "ccblogs1"
            self.__pwd = "123456"
    
        def get_name(self):
            print(self.name)
    
        def __get_pwd(self):
            print(self.__pwd)
    
        def set_pwd(self):
            self.__pwd = "000000"
    
        def get_pwd(self):
            return self.__pwd
    
    
    class Nb2(Nb1):
        pass
    
    
    nb = Nb2()
    print(nb.get_pwd())
    nb.set_pwd()
    print(nb.get_pwd())
    
    # 输出结果
    123456
    000000
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值