python成员方法共享吗_python 入坑路 类的特殊成员方法

一、概述

前面我们讲了类的方法,有普通方法,就是我们自己定义的方法,还有静态方法,类方法,属性方法,

其实还有另一类方法,叫做类的特殊成员方法

二、类的特殊成员方法

2.1 __doc__  ,表示类的描述信息

class Dog(object):

'''

dog class #__doc__ 就是打印这里的信息

'''

def __init__(self,name):

self.name=name

self.age=None

self.__sex=None

def walk(self):

print("%s is walking..." %self.name)

d=Dog("niubi")

print(d.__doc__)

-----输出----

dog class

2.2 __module__和__class__

说明:

作用:当多次引用的时候,查看是从哪里导入的。没啥卵用

__module__: 表示当前操作的对象在哪个模块

__class__:表示当前操作的对象的类是什么

2.3 __init__

说明:构造方法,通过类创建对象时,自动触发执行

2.4 __del__

说明:析构方法,当对象在内存中被释放时,自动触发执行

2.5__call__

class Foo(object):

def __init__(self):

self.name = "nb"

def __call__(self, *args, **kwargs): # 重写call方法

print("running call", args, kwargs)

f = Foo() # 执行__init__

f(1, 2, 3, name="nb") # 执行call方法,也可以写成 Foo()(1,2,3,name="nb")

---

running call (1, 2, 3) {'name': 'nb'}

2.6__dict__  ,挺有用

类.__dict__ 查看类中所有方法成员

class Dog(object):

'''

dog class

'''

def __init__(self,name):

self.name=name

self.age=None

self.__sex=None

def walk(self):

print("%s is walking..." %self.name)

def eat(self,food):

print("%s is eating %s" %(self.name,food))

def age(self,age):

self.age=age

def sex(self):

return self.__sex

d=Dog("NIUBI")

print(Dog.__dict__)

=======

{'__module__': '__main__', '__doc__': '\n dog class\n ', '__init__': , 'walk': , 'eat': , 'age': , 'sex': , '__dict__': , '__weakref__': }

实例.__dict__  :打印出类中所有属性,不包括类属性。

class Dog(object):

'''

dog class

'''

class_shuxing="hehe" #这个类属性没有被打印出来

def __init__(self,name):

self.name=name

self.age=None

self.__sex=None

def walk(self):

print("%s is walking..." %self.name)

def eat(self,food):

print("%s is eating %s" %(self.name,food))

def age(self,age):

self.age=age

def sex(self):

return self.__sex

d=Dog("NIUBI")

#print(Dog.__dict__)

print(d.__dict__)

==============

{'name': 'NIUBI', 'age': None, '_Dog__sex': None}

#不包括类属性

2.7 __str__  ,

如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值 ,据说 Djiango 中很长用,以后详解

class test(object):

def __init__(self,name):

self.name=name

def __str__(self):

return "".format(self.name)

d=test("hehe")

print(d)

--------------

2.8  __getitem__、__setitem__、__delitem__

说明:用于索引操作,如字典。以上分别表示获取、设置、删除数据

作用:据说可以用类封装一些东西,然后暴露给用户一个字典,在类中控制用户对字典操作的权限。

class test(object):

def __getitem__(self, item):

print("getitem",item)

def __setitem__(self, key, value):

print("setitem",key,value)

def __delitem__(self, key):

print("delete",key)

t=test()

t["name"]

t["name"]="nb"

del t["name"]

-----------------

getitem name

setitem name nb

delete name #注:这边的__delitem__没有做真正的删除,只是触发这个方法,想要真正删除,只需要在__delitem__函数中添加删除功能即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值