32-特殊成员和魔法方法

简介: Python

特殊成员和魔法方法
Python中有大量类似__doc__这种以双下划线开头和结尾的特殊成员及“魔法方法”,它们有着非常重要的地位和作用,也是Python语言独具特色的语法之一!
init : 构造函数,在生成对象时调用
del : 析构函数,释放对象时使用
repr : 打印,转换
setitem : 按照索引赋值
getitem: 按照索引获取值
len: 获得长度
cmp: 比较运算
call: 调用
add: 加运算
sub: 减运算
mul: 乘运算
div: 除运算
mod: 求余运算
pow: 幂

doc
class Foo:
“”" 测试 “”"
def func(self):
pass

打印类的说明文档
print(Foo.doc)
测试

init()
实例化方法,通过类创建实例时,自动触发执行。
class Foo:
def init(self, name):
self.name = name
obj = Foo(jack’) # 自动执行类中的 init 方法

del()
析构方法,当对象在内存中被释放时,自动触发此方法。
注:此方法一般无须自定义,因为Python自带内存分配和释放机制,除非你需要在释放的时候指定做一些动作。析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。
class Foo:
def del(self):
print(“我被回收了!”)

obj = Foo()
obj1 = obj
del obj
del obj1
print(“========================”)

call()
如果为一个类编写了该方法,那么在该类的实例后面加括号,可会调用这个方法。
注:构造方法的执行是由类加括号执行的,即:对象 = 类名(),而对于__call__() 方法,是由对象后加括号触发的,即:对象() 或者 类()()
class Foo:
def init(self):
pass
def call(self, args, *kwargs):
print(‘call’)

obj = Foo() # 执行 init
obj() # 执行 call

dict
列出类或对象中的所有成员!非常重要和有用的一个属性。
class Province:
country = ‘China’
def init(self, name, count):
self.name = name
self.count = count
def func(self, args, *kwargs):
print(‘func’)

获取类的成员
print(Province.dict)

new()
new() 方法是在类准备将自身实例化时调用
class Dog(object):
def init(self):
print(“init方法”)

def __new__(cls):

print(id(cls))
print("new方法")
return object.__new__(cls)

print(id(Dog))
g = Dog()

1 调用__new__方法来创建一个对象 然后返回这个对象的引用
2 调用__init__方法 把返回值传进去
3 返回对象的引用

相关文章
|
2月前
|
设计模式 安全 C++
C++ 特殊成员
C++ 特殊成员
26 0
|
6月前
|
C++
45 C++ - 继承中同名成员的处理方法
45 C++ - 继承中同名成员的处理方法
28 0
|
2月前
|
C++
28对象成员的引用
28对象成员的引用
10 0
|
9月前
|
C++
C++特殊成员
C++特殊成员
|
数据安全/隐私保护 C++
C++类中数据成员要私有
C++类中数据成员要私有
232 0
|
Java
【Groovy】Groovy 方法调用 ( 使用 对象名.成员名 访问 Groovy 类的成员 | 使用 对象名.‘成员名‘ 访问类的成员 | 使用 对象名[‘成员名‘] 访问类成员 )
【Groovy】Groovy 方法调用 ( 使用 对象名.成员名 访问 Groovy 类的成员 | 使用 对象名.‘成员名‘ 访问类的成员 | 使用 对象名[‘成员名‘] 访问类成员 )
191 0
【Groovy】Groovy 方法调用 ( 使用 对象名.成员名 访问 Groovy 类的成员 | 使用 对象名.‘成员名‘ 访问类的成员 | 使用 对象名[‘成员名‘] 访问类成员 )
内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
一个内部类对象可以访问创建它的外部类对象的成员,包括私有成员。
1477 0
|
C# 开发工具
[C#]如何访问及调用类中私有成员及方法
原文:[C#]如何访问及调用类中私有成员及方法 本文为原创文章、源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称、作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.
1218 0