文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python3学习之类成员、扩展父类方法

2023-01-31 08:07

关注
##类成员包括:
#字段:静态字段、普通字段    字段也可以理解为“变量”
#方法:普通方法、静态方法、类方法;所有方法属于类    方法也可以理解为“函数”
#属性:具有方法的定义形式,具有字段访问形式         用字段的访问方式调用方法,就需要定义“属性”
#当不想创建对象访问类中方法时,方法需要是静态方法

##成员修饰符
#公有字段   内外都可以访问
#__name   私有字段,前面有两个下划线,只在类中可以访问,通过对象访问不了 ,继承的父类和子类中也无法调用,只在本类中可以
#PS:不到万不得已不要在外部访问私有字段,obj._Foo__name   该方式可以访问私有字段


##特殊成员 __xxxx__
#__init__     构造方法,创建对象时自动执行
#__del__      析构方法,回收闲置对象占用的内存之前自动执行该函数,不需要自己定义,python自动执行
#__doc__      注释、说明
#__class__    当前类
#__call__     对象后面加括号,调用类的__call__方法,__call__需要在类中定义
#__str__      打印对象时是对象的内存地址,类中定义了__str__方法后,可以自定义输出内容及格式
#__dict__     打印该对象包含的所有方法
#__getitem__   __setitem__  __delitem__   当对象参数是列表时,实际上调用了这些方法
#__iter__     对象默认不可迭代,当定义了该方法,才可以;当对象放在for循环里,默认调用对象的__iter__方法(这是规定)
#issubclass(cls1,cls2)    判断cls1是不是cls2的子类,返回True或者False
#isinstance(obj,classname)   判断obj是不是classname的实例(继承也算是)

##调用父类方法
#方法1  主动执行父类的方法:  super(子类,self).父类方法;扩展父类方法的功能时使用;父类和子类的方法名需要相同
#方法2  通过类调用,一般不用


#
# class Foo:
#     CC = 123   #CC叫静态字段,保存在类里,可以通”过类.字段“访问,也可以通过对象访问,java中只能通过类访问
#
#     def __init__(self):
#         self.name = 'test'  #name 就叫字段(普通字段),保存在对象里
#
#     def show(self):     #普通方法,通过对象调用  ,self必须有
#         print(self.name)
#         return "sssss"
#
#     @staticmethod     #静态方法定义,通过类调用,相当于函数
#     def f1(x):        #参数可有可无
#         print(x+"==lllllll")
#
#     @classmethod     #类方法定义
#     def f2(cls):     #cls 参数必须有,是类名,通过类调用
#         print(cls)
#
#     @property   #属性定义  通过Foo.f3调用
#     def f3(self):   #self必须有
#         return self.name + 1
#
#     @f3.setter   #给属性传值  通过 Foo.f3 = 123
#     def f3(self,value):
#         print(value)
#
#     @f3.deleter  #属性删除,并不是要删除f3,只是调用了f3,执行代码为pass(可以是任意代码) 通过del  Foo.f3
#     def f3(self):
#         pass
#
#
# class shuxing:
#
#     def f1(self):
#         pass
#
#     def f2(self,value):
#         print(value)
#
#     def f3(self):
#         pass
#
#     def __getitem__(self, item):
#         pass
#
#     def __setitem__(self, key, value):
#         pass
#
#     def __delitem__(self, key):
#         pass
#
#
#     foo = property(fget=f1,fset=f2,fdel=f3)   #另一种属性定义方式,fget fset fdel 是固定关键字
#

#注意:默认规则 静态字段要通过类访问;普通字段通过对象访问

# obj = Foo()
# print(Foo.f1("iiiii"))   #静态方法调用
# print(obj.show())        #普通方法调用
# Foo.f2()        #类方法调用
# print(Foo.f3)          #属性调用,不加括号
# d = Foo.__dict__
# print(type(d),d)

#扩展字典,增加字典有序的属性,借助列表
#字典可以赋值,可以打印
class MyDict(dict):

    def __init__(self):
        self.li = []
        super(MyDict,self).__init__()

    def __setitem__(self, key, value):

        self.li.append(key)
        super(MyDict, self).__setitem__(key, value)

    def __str__(self):
        t = []
        # ml = super(MyDict,self).get()
        for k in self.li:
            v =self.get(k)
            t.append("'%s':%s" %(k,v))

        return "{" + ",".join(t) + "}"


d = MyDict()
# d2 = MyDict()

d["k1"] = 123
d["k2"] = 456
d["k3"] = 45611
print(d)
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯