类的内建函数和用来定制类的特殊方法

author author     2022-08-20     400

关键词:

两个类的内建函数
isinstance()
 1 class P1():
 2 
 3     def __init__(self, name):
 4         self.name = name
 5         pass
 6 
 7 class P2(P1):
 8     A = P1(wang)  # 定义类属性!!
 9     B = P1(zi)
10 
11 print(P2.__dict__)
12 for i, v in P2.__dict__.items():
13     if i ==A:
14         print(v)
15         print(isinstance(v,P1))
l=‘<__main__.P1 object at 0x01DF0290>‘
print(l)
print(isinstance(l, P1))

运行结果:

{__module__: __main__, A: <__main__.P1 object at 0x01DF0290>, B: <__main__.P1 object at 0x01DF0390>, __doc__: None}
<__main__.P1 object at 0x01DF0290>
True
<__main__.P1 object at 0x01DF0290>
False

注意第15行,是v! <__main__.P1 object at 0x01DF0290>这种格式只能被存储,并通过变量传递,不能被赋值。

二:super()
class C(P):
   def __init__(self):
       P.__init__(self)
###等价于
class C(P):
   def __init__(self):
       super(C,self).__init__()

super用于查找是根据基类的mor()函数查找上一级的。

具体解释参考:

http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html

 

用来定制类的特殊方法(包括__init__构造器和__del__结构器),它们有些有默认的特定行为,而其他的则没有。

可实现:

重载操作符     + -   ...

模拟标准类型   (例子二)

一:__len__内建len()函数
class dog():
    def __len__(self):
        return 100

print(len(dog()))   #  100

 

二:__str__ 表示可打印时的输出,__repr__表示运行时的字符串输出,rept()和‘’操纵符号

class RoundFloat2():
    def __init__(self,val):
        assert isinstance(val,float), Value must be a float
        self.value = round(val,2)

当你

print(RoundFloat2(3.5)) 

是无法输出正确的数,输出的是<__main__.RoundFloat2 object at 0x01CFB430>

#要定义__str__和__repr__函数
def __str__(self):
     return (str(self.value) )
 __repr__ = __str__  

 

如果

class RoundFloat2(float):   RoundFloat2是继承自float标准类的,就不需要重新定制,因为float类中已经定义好了__str__和__repr__。

三:迭代器

3.0中引用时用*.next()的方式会出错,用next(*)函数或者*.__next__()的方式

a=range(10)
i=iter(a)
# for j in range(10):
#     print(i.__next__())  #这样也行
for j in range(10):
    print(next(i))

可以自己定义一个迭代器,__iter__仅返回self,对象就被声明为迭代器。

class AnyIter():   #建立迭代器(类)

    def __init__(self, data, safe=False):
        self.safe = safe
        self.iter = iter(data)  # iter()函数会检查你传递的是不是一个序列,如果是,用__next__函数根据索引从0迭代到序列结束

    def __iter__(self):
        return self

    def __next__(self, howmany=2):     #内建__next__函数
        retval = []
        for eachItem in range(howmany):
            retval.append(self.iter.__next__())   #或者用next(*)迭代
        return retval
for item in AnyIter(range(10)):    #AnyIter(range(10))是一个迭代器,for循环语句中每一次执行一次,就会执行__next__()函数直到遍历结束。
    print(item)

a= AnyIter(range(10))
for j in range(1,5):
    print(j,:,a.__next__(j))    #主动调用__next__函数,运行结果

结果为:

[0, 1]
[2, 3]
[4, 5]
[6, 7]
[8, 9]
1 : [0]
2 : [1, 2]
3 : [3, 4, 5]
4 : [6, 7, 8, 9]

 

类的成员,类的特殊方法(代码片段)

类的成员:  在类中的私有字段和私有方法是不能被类意外的方法调用的。只能在类的内使用。  在普通字段和方法前加两个下划线就可以把普通字段定义成私有字段或方法。   在子类中,不能执行父类中的方法,不... 查看详情

python中,类的特殊方法与内置函数的关联(代码片段)

目录Python类Python类的设计原则特殊方法【Specialmethods】Ducktyping内置函数EnglishVersionThekeydesignprinciplesforPythonclassesSpecialmethodsbuilt-infunctionsPython类Python类的设计原则封装(Encapsulation):Python类被设计用来将相关数据和行为封装到一个... 查看详情

4.1.7特殊方法与运算符重载(代码片段)

...殊方法,其中比较常见的是构造函数和析构函数。Python中类的构造函数是__init__(),一般用来为数据成员设置初始值或进行其他必要的初始化工作,在创建对象时被自动调用和执行。如果用户没有设计构造函数,Python将提供一个... 查看详情

12.为组件的内建信号编写槽函数(代码片段)

...选中清空按钮右键->Gotoslot->clicked()    #QpushButton类的按钮常用的信号是clicked,就是点击发射信号  - 复制函数名称在myDialog.py文件的QmyDialog类下定义同名函数defon_btnClear_clicked(self):self.ui.textEdit.clear()V 查看详情

js的内建函数reduce

reduce函数,是ECMAScript5规范中出现的数组方法。在平时的工作中,相信大家使用的场景并不多,一般而言,可以通过reduce方法实现的逻辑都可以通过forEach方法来变相的实现,虽然不清楚浏览器的js引擎是如何在C++层面实现这两... 查看详情

day6面向对象--类的特殊成员方法

类的特殊成员方法   1.__doc__  表示类的描述信息classFunc(object):‘‘‘__doc__方法是用来打印类的描述信息‘‘‘deftell(self):passdefenroll(self):passprint(Func.__doc__)#输出:类的描述信息运行结果如下:__doc__方法是用来打印类... 查看详情

一文搞懂python的内建函数,自己添加一个print函数(代码片段)

目录1、什么是内建函数?2、内置的内建函数多有哪些?3、特殊函数说明3.1exec3.2eval3.3compile3.4globals和locals4、自己增加一个内置函数5、总结写python的同学应该都用过print函数,这个函数我们没有定义为什么可以调用... 查看详情

类的属性和继承(代码片段)

一、属性类是用来描述一类事物,类的对象指的是这一类事物中的一个个体.只要是事物就要有属性,属性分为:(1)数据属性:就是变量.(2)函数属性:就是函数,在面向对象里通常称为方法.注意:类和对象均用点(.)来访问自己的属性.二... 查看详情

类的特殊成员方法

类的成员除了有类变量、实例变量、方法外,还有一些特殊的成员方法,下面列举些比较重要的特殊成员:类的特殊成员方法1、__doc__: 表示类的描述信息,  大家都知道,在开发中应该在代码中多加注释,来增强代码的可... 查看详情

socket()模块和套接字对象的内建方法

一、socket()模块函数要使用socket.socket()函数来创建套接字,其语法如下:socket(socket_family,socket_type,protocol=0)如上所述,scoket_family不是AF_UNIX就是AF_INET,scoket_type可以是SOCK_STREAM或SOCK_DGRAM,protocol一般不填,默认值为0.创建一个TCP/IP... 查看详情

specialattributesofclass类的特殊属性

...;__init__初始化方法不要写任何返回语句,他返回的是你的类的实例特殊属性__name__ 类和函数的名字__module__ 类定义所在的模块名__class__ 对象或类所属的类__bases__ 类的基类的元组,按列表出现的顺序__doc__ 类、函数文档字符串... 查看详情

面向对象---类的绑定方法,面向对象高阶(代码片段)

昨日回顾类的绑定方法classmethod(类的绑定方法)翻译过来是一个类方法,是一个装饰器,可以装饰给类内部的方法,使该方法绑定给类来使用。---对象的绑定方法的特殊之处:由对象来调用,会将对象当作第一个参数传给该方... 查看详情

第6章:继承和抽象类

继承新的类通过继承可以获得已有类的所有特性和行为继承允许两个类(子类和超类)之间共享数据和方法可以复用已有的代码,从而消除冗余性使得软件系统的维护和验证变得简单子类通过修改自己的方法或者添加新的方法,... 查看详情

类的属性和继承(代码片段)

一、属性类是用来描述一类事物,类的对象指的是这一类事物中的一个个体.只要是事物就要有属性,属性分为:(1)数据属性:就是变量.(2)函数属性:就是函数,在面向对象里通常称为方法.注意:类和对象均用点(.)来访问自己的属性.二... 查看详情

一文搞懂python的内建函数,自己添加一个print函数(代码片段)

目录1、什么是内建函数?2、内置的内建函数多有哪些?3、特殊函数说明3.1exec3.2eval3.3compile3.4globals和locals4、自己增加一个内置函数5、总结写python的同学应该都用过print函数,这个函数我们没有定义为什么可以调用... 查看详情

面向对象类的特殊成员方法

类的特殊成员方法:1.__doc__:打印类下面的注释2.__module__和__class__:fromlib.aaimportC输出类被导出的模块名lib.aa,输出类的模块名和类名<classlib.aa.C>3.__init__和__del__注:析构方法一般无须定义,因为Python是一门高级语言,程序员在... 查看详情

接口和抽象类的相同与区别

前言:接口和抽象类是代码当中经常使用的两样,他们的代码方式不同于其他,有自己一套特殊的书写方式功能特点下面介绍一哈他的使用规则同:都不能被实例化,可以定义引用 不同:抽象类有具体方法和抽象方法,有4... 查看详情

字符串的内建函数

Python的字符串内建函数Python的字符串常用内建函数如下: 序号方法及描述1capitalize()将字符串的第一个字符转换为大写2center(width,fillchar)返回一个指定的宽度width居中的字符串,fillchar为填充的字符,默认为空格。3count(str,beg=0,... 查看详情