python类与对象

  • python 万物皆对象
  • 在程序中,先有类后有对象
  • 面向对象的核心:类和对象 封装继承多态
  • 对象:
    1. 类对象(1个)
    2. 实例对象(n个)
    • 在定义类的普通方法时要求[[[第一个参数]]]需要对应调用方法时所使用的实例对象 (一般命名为self) 实例对象名.方法名(实参列表)
    • Tips:在通过类的实例对象调用类中的普通方法时,并不需要传入self参数的值,self会自动对应调用该方法时所使用的对象。 类中的普通方法只能通过实例对象调用,而不能通过类名直接调用(通过实例对象调用时会自动将该实例对象传给self,而通过类调用时则不会有这个隐含的参数传递)
  • 属性:(类的成员1)
    1. 类属性
      1. 位置:类的里面,方法的外面
      2. ?:都有一个+抽象
      3. 访问/修改:类对象(推荐)+实例对象
    2. 实例属性  
      1. 位置:类的里面并且在方法的里面
      2. ?:都有+值可能不一样+有几个  
      3. 增加/修改/访问:实例对象
    3. 若以”__“开头则为私有属性 若想在类外访问私有属性,格式为:实例对象名._类名__私有属性名
  • 方法:(类的成员2) self当前实例对象,cls当前类对象
    1. 类方法(@classmethod装饰器:标识一下,我下面写的是静态方法)
      1. 访问/修改:类对象(推荐)+实例对象
    2. 实例方法
      1. c.访问/修改:实例对象
    3. 特殊方法:
      1. 内置方法:
        1. __new__(开辟内存空间【只要有类的声明就开辟新的空间,在新建对象时调用本方法返回信息】)
        2. __str__(用到print时调用该方法,有内置调内置,有则调自己类中)
        3. __len__(len(lst)==lst.__len__)
      2. 构造方法:__init__(在创建一个类时自动执行。负责完成新建对象的初始化,子类不能够自动调用父类的__init__方法,可以重写)
      3. 析构方法:__del__(在销毁一个对象时自动执行。负责完成新建对象的销毁)
    4. 静态方法(一般不会被实例对象调用)
  • 继承:
    1. class 子类名(父类名1,父类名2...【前面的优先级高,名相同则使用前面的方法或属性】)
    2. __mro__(查看类的优先级【我本身的优先级最高】)
    3. 重写同名方法1:父类名.重名方法(self)【self必须写,如果使用子类调用方法,会出现递归调用,进入死循环——>不建议使用】
    4. 重写同名方法2:super().重名方法()【可以写参数也可以不写】 super([子类名[,对象名或类名]]).方法名
    5. object:所有类的父类 第一个参数是要获取父类代理对象的类名 第二个参数如果传入对象名,则该对象所属的类必须是第一个参数指定的
class Users:  # 类名
    count = 0
    __id = "Unknown"
    name = "用户"
    age = "0"
    tel = "Unknown"

    @classmethod
    def test(cls):
        Users.count += 1
        print("当前实例对象共有%s人" % cls.count)

    def __init__(self, name1):
        self.name = name1
        print("构造方法被调用")

    def __str__(self):
        return f"我是{self.name}"

    def __len__(self):
        return len(self.name)

    def SetInfo(self, new_name, new_id):
        self.name = new_name
        self.__id = new_id

    def SetName(self, new_name):
        self.name = new_name

    def PrintName(self):
        print("姓名{},身份证号{}".format(self.name, self.__id))

    def __del__(self):
        print("析构{}".format(self.name))


class Manger(Users):
    def __init__(self, name, ide=5):
        # super().__init__(self, ide)
        Users().__init__(self, name, ide)
        print("子类的构造方法")

    def search(self):
        print("新增用户")


if __name__ == "__main__":
    user1 = Users("张三丰")
    # user1.addr = "中山路"
    # user1.SetName("小宝")
    # user1.SetInfo("123", "123456789")
    # user2 = Users()
    # user3 = Users()
    # user2.SetName("小李")
    # user2.PrintName()
    # user3.PrintName()
    # user1.PrintName()
    # user3.SetName("154")
    # user3.PrintName()
    # Users.test()
    # user3.test()
    # user1.test()
    # user2.test()
    # manger1 = Manger("123456", 123)
    # print(manger1.__len__())
    print(user1.__len__())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值