首页 > 其他 > 详细

类的特殊成员方法

时间:2018-01-18 21:44:16      阅读:194      评论:0      收藏:0      [点我收藏+]

 

  • __doc__:显示类的描述
技术分享图片
class Dog(object):
   ‘‘‘
   描述狗狗的类
   ‘‘‘
   print("一个方法")

d = Dog()
print(d.__doc__)
__doc__

 

  • __module__:输出模块   __class__:输出类
技术分享图片
class C:
    def eat(self):
        print("eat")
lib/aa
技术分享图片
from lib.aa import C
class Dog(object):
   def eat(self):
      print("eat for dog")
obj = C()
print(obj.__module__)
print(obj.__class__)
d = Dog()
print(d.__module__)
print(d.__class__)
‘‘‘
lib.aa
<class ‘lib.aa.C‘>
__main__
<class ‘__main__.Dog‘>
‘‘‘
__module__ __class__

 

  • __call__
技术分享图片
class Dog(object):
   ‘‘‘
   描述狗狗的类
   ‘‘‘
   def eat(self):
      print("一个方法")

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

d = Dog()
d(1,2,3,4,name = "alex")
Dog()(4,5,6,7,7,name = "alex")
View Code

 

  • __dict__
技术分享图片
class Dog(object):
   ‘‘‘
   描述狗狗的类
   ‘‘‘
   sex = "man"
   def __init__(self,name,age):
      self.name = name
      self.age =age
   def eat(self):
      print("一个方法")

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

print(Dog.__dict__)#类直接调用的时候,打印类里的所有属性,不包括实例属性
# {‘__module__‘: ‘__main__‘, ‘__doc__‘: ‘\n   描述狗狗的类\n   ‘, ‘sex‘: ‘man‘, ‘__init__‘: <function Dog.__init__ at 0x00000000024998C8>, ‘eat‘: <function Dog.eat at 0x0000000002499950>, ‘__call__‘: <function Dog.__call__ at 0x00000000024999D8>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Dog‘ objects>, ‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Dog‘ objects>}
d = Dog("alex",12)
print(d.__dict__)#实例调用的时候,打印实例的所有属性,不包括类的属性
# {‘name‘: ‘alex‘, ‘age‘: 12}
View Code

 

  • __str__:如果一个类中定义了该方法,那么打印对象时,默认输出该方法的返回值(能够辨别类对象)
技术分享图片
class Dog(object):
   ‘‘‘
   描述狗狗的类
   ‘‘‘
   def __init__(self,name):
      self.name = name
   def eat(self):
      print("一个方法")

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

d = Dog("alex")
print(d)
# <__main__.Dog object at 0x00000000024E87F0>
没有__str__前
技术分享图片
class Dog(object):
   ‘‘‘
   描述狗狗的类
   ‘‘‘
   def __init__(self,name):
      self.name = name
   def eat(self):
      print("一个方法")

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

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

d = Dog("alex")
print(d)
# <obj:alex>
有__str__后

 

  • __getitem__      __setitem__  __delitem__
技术分享图片
class Foo(object):
    def __init__(self):
       self.data = {}

    def __getitem__(self, key):
        print("__getitem__",key)

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

obj = Foo()
res = obj["a"]
obj["name"] = "alex"
del obj["name"]
认识
技术分享图片
class Foo(object):
    def __init__(self):
       self.data = {}

    def __getitem__(self, key):
        print("__getitem__",key)
        return  self.data.get(key)

    def __setitem__(self, key, value):
        print("__setitem__",key,value)
        self.data[key] = value
    def __delitem__(self, key):
        print("__delitem__",key)

obj = Foo()
obj["name"] = "alex"#触发__setitem__
print(obj["name"])#触发__getitem__
print(obj.data)
del obj["name"] #触发__delitem__
View Code

 

类的特殊成员方法

原文:https://www.cnblogs.com/cheng662540/p/8313138.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!