Python类的特殊方法

  1. doc 描述类的信息

    class Foo(object):
    # 单引号和双引号都可以
    “”“这里描述类的信息”""

     def func(self):
     	pass
    

    print(Foo.doc) #>>>这里描述类的信息

  2. call 对象后面加括号,触发执行

    __call__方法的执行是由对象加括号触发的,即:对象()或者 类()()

    class Foo(object):
    def call(self, *args, **kwargs):
    print(“running call”, args, kwargs)

    foo = Foo()
    foo(1, 2, 3, name = “UserPython”) #>>>running call (1, 2, 3) {‘name’: ‘UserPython’}

    Foo()(1, 2, 3, name = “UserPython”) #>>>running call (1, 2, 3) {‘name’: ‘UserPython’}

  3. dict 查看类或对象中的所有成员

    class Foo(object):
    def init(self, name, age):
    self.name = name
    self.age = age

    foo = Foo(“UserPython”, 17)

    print(Foo.dict) #打印类里的所有属性,不包括实例属性
    print(foo.dict) #打印所有实例属性,不包括类属性

  4. str 如果一个类中定义了__str__方法,那么在打印对象时,默认输出该方法的返回值

    class Foo(object):
    def init(self, name, age):
    self.name = name
    self.age = age

     def __str__(self):
     	return "<obj:%s>" % self.name
    

    foo = Foo(“UserPython”, 17)

    print(foo) #>>><obj:UserPython>

  5. getitemsetitemdelitem 用于索引操作,如字典。分别表示获取、设置、删除数据

    class Foo(object):

     def __getitem__(self, key):
     	print("__getitem__", key)
    
     def __setitem__(self, key, value):
     	print("__setitem__", key, value)
    
     def __delitem__(self, key):
     	print("__delitem__", key)
    

    foo = Foo()
    foo[“name”] = “UserPython” #>>>setitem name UserPython 触发__setitem__
    foo[“name”] #>>>getitem name 触发__getitem__
    del foo[“name”] #>>>delitem name 触发__delitem__

  6. newmetaclass

    class Foo(object):

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

    foo = Foo(“UserPython”)
    ‘’’
    上述代码中,foo是通过Foo类实例化的对象,其实,不仅foo是一个对象,Foo类本身也是一个对象,因为在Python中一切事物都是对象。
    如果按照一切事物都是对象的理论:foo对象时通过执行Foo类的构造方法创建,那么Foo类对象应该也是通过执行某个类的构造方法创建。
    ‘’’

    print(type(foo)) #>>><class ‘main.Foo’> 表示foo对象是由Foo类创建
    print(type(Foo)) #>>><class ‘type’> 表示Foo类对象是由type类创建

    所以,foo对象是Foo类的一个实例,Foo类对象时type类的一个实例,即:Foo类对象是通过type类的构造方法创建。那么,创建类就可以有两种方式了

    普通方式

    class Foo(object):
    def func(self):
    print(“hello UserPython”)

    特殊方式

    def func(self):
    print(“hello %s” % self.name)

    def init(self, name, age): #构造方法
    self.name = name
    self.age = age

    创建了一个type类,然后用type类实例化了一个Foo类,由于Foo本身是一个类,所以Foo又实例化了一个对象foo

    Foo = type(‘Foo’, (object, ), {“func” : func,
    init” : init})

    foo = Foo(“UserPython”, 19)

    foo.func()

    print(type(Foo))

原文:https://blog.csdn.net/UserPython/article/details/79946795?utm_source=copy

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值