类的双下划线方法

# 常用的
"""
__len__,__hash__,__eq__这些都是类中默认有的方法
"""
a, b = 3, 2
len()  # 就是调用哪个对象的__len__()方法
hash()  # 就是调用对象的__hash__()方法
print(a == b)  # ==就是调用对象的__eq__(a,b)方法
# item系列 可以通过字典的方式增删改对象的属性
# __getitem__ 	object[“item”]
# __setitem__ 	object[“key”] = value
# __delitem__ 	del object[“key”]
# __delattr__ 	del object.item

在这里插入图片描述

del析构方法

class A(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):  # 一般是控制台直接使用或者使用编译器的时候
        return "%s-%s" % (self.name, self.age)

    def __str__(self):  # 其他情况下重写了__str__方法就使用这个
        return "名字%s-年龄%s" % (self.name, self.age)

    def __del__(self):  # 程序结束的时候会执行
        print("%s被终结了!!!" % self.name)


a1 = A("小张", 18)
print(repr(a1))
print(str(a1))
# del析构
del a1
print(a1)  # 因为实例对象被删除了

在这里插入图片描述

new方法

class People(object):
    foods = []  # 存放食物
    a = None  # 存放实例

    def __init__(self, name):
        self.name = name

    def buy_food(self, food):
        self.foods.append(food)
        print("%s买了%s" % (self.name, food))

    def __new__(cls, *args, **kwargs):  # 在__init__方法之前执行
        if cls.a is None:
            obj = object.__new__(cls)  # 实例化的过程
            print(obj)
            cls.a = obj
        return cls.a  # 以后的每次实例化都会返回第一次存的实例对象,然后在这个基础上重新执行__init__方法


p1 = People("小工")
p2 = People("小红")
p3 = People("小慌")
print(p1, p2, p3)  # 发现用的是同一个对象,这个就是单例模式
p1.buy_food("樱桃")
p2.buy_food("牛肉")
p3.buy_food("海鲜")

在这里插入图片描述

Call方法(对象+括号)几乎不用

class People(object):

    def __init__(self, name):
        self.name = name

    def __call__(self, *args, **kwargs):
        print(args, kwargs)


p1 = People("哈萨德")
p1("sadsad")
People("dasd")("45655")

在这里插入图片描述

isinstance/issubclass

class Student(object):
    pass


s1 = Student()
print(isinstance(s1, Student))  # 判断s1是否是Student类的对象

print(issubclass(Student, object))  # 判断Student是否是object的派生类

在这里插入图片描述

类的其他创建方式(不推荐,但是要知道)

def __init__(self, name, age):
    self.name = name
    self.age = age


def run(self):
    print("%s在学习" % self.name)


a = type("Student", (object,), {"type": "people", "__init__": __init__, "run": run})
s1 = a("小张",18)
s1.run()
print(s1.name,s1.age)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发酵的西瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值