python---自定义内置方法

派生内置

定义一个新类型的元组,对于传入的可迭代对象,我们只保留int类型且值大于0的元素。
python中有内置的元组类型,tuple类型。自己也可以自定义一个方法类型,

class IntTuple(tuple):
#     # 重写父类的构造方法
#     def __init__(self,iterable):
#         # iterable里面的元素  为整数且>0的值
#         for i in iterable:
#             if isinstance(i,int) and i >0:  # 遍历对象
#                 super().__init__()
#         # print(self)
#         '''
#         说明  元组对象 在__init__构造方法之前 就已经创建完成了,所以没有实现
#         '''
# int_tuple = IntTuple([-2,2,"hh",["x","y","z"],4])
# # print(int_tuple)  # (-2, 2, 'hh', ['x', 'y', 'z'], 4)
#

创建的方法并没有实现,主要原因的_init__方法。

# class Demo(object):
#     def __new__(cls, *args, **kwargs):
#         print("__new__")  # 创建对象
#         # return super().__new__(cls)  # 返回出对象  __new__ __init__
#         return object.__new__(cls)  # 返回出对象  __new__ __init__
#
#     def __init__(self):
#         print("__init__")
# '''
# 加上return 后  就会将两个对象一起打印,若没有就只打印new
# '''
# # d = Demo()   # __new__
# d = Demo.__new__(Demo)  # 创建对象
# Demo.__init__(d)   # __new__   __init__ 初始化

如上述代码所示,在__new__方法来创建对象的时候,返回的的是new,init方法并没有打印出来,需要return才能打印出来,是方法重现。

  1. __new__方法是创建对象的方法
    此处重写了父类的方法
    需调用父类的__new__方法来创建对象
    需将对象返回回来给__init__方法,没有__new__方法,则会调用基类方法。
  2. __init__方法为初始化方法
    注意:当创建完对象时,自动调用它。
# li = list.__new__(list,"abc")
# # print(li)  # []
# list.__init__(li,"abc")
# print(li)  # ['a', 'b', 'c']

# tu = tuple.__new__(tuple,"123")
# print(tu)   # ('1', '2', '3')
# tuple.__init__(tu,"123")
# print(tu)  #  ('1', '2', '3')

元组和列表在创建时的区别。

class IntTuple(tuple):
    def __new__(cls, iterable):
        f = [i for i in iterable if isinstance(i,int) and i >0]
        return super().__new__(cls,f)

int_tuple = IntTuple([2,-3,"hh",["a","b"],4])
print(int_tuple)  # (2, 4)

当使用new方法来重写自定义方法时,就可以实现该方法。

列表推导式:

li = []
for i in range(10):
    print(i)
    # li.append(i)
    if i%2 == 0:
        li.append(i)
# print(li)

# print([i for i in range(10)])
# print([i for i in range(10) if i%2 ==0])

# 嵌套
print([(i,j) for i in range(10) for j in range(10)])

for i in range(10):
    for j in range(10):
        print(i,j)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值