Python面向对象的特殊成员和修饰符

2019-03-08  本文已影响0人  Donald_32e5

一、类成员的修饰符

类的所有成员在Python面向对象的成员组成部分已经详细介绍了,对于每个成员而言,都有两种形式:

私有成员和公有成员在定义的时候不同:私有成员命名时,需要在前面加上两个下划线,特殊成员除外(initstrdict

class TestObj:
    def __ init__(self):
          self.name = '公有变量'
          self.__age = '私有变量'  

1、 其中公有静态字段和私有静态字段也是一样,私有的只能在类的内部访问,公有静态在派生类中也可以访问

class C:
    name = '老李'  # 静态公有字段
    __age = '20'    # 静态私有字段

   def get_name(self):
        return C.name

   def get_age(self):
        return C.__age

 
class B(C):
     def show():
           return C.name

     def  show_age():
          return C.__age

C.name   # 类访问
C.__age  # 错误


p = C()
p.get_name()    # 类内部访问
p.get_age()      # 类内部访问成功


o = B()
o.show()          # 派生类访问
o.show_age    # 访问错误   

如果需要强制访问私有变量,可以通过 【对象.类名_私有字段】(o._C__age),不建议强制访问私有成员

二、类的特殊成员

1 、__doc__: 表示类的描述信息

class Test:
    """这里是描述信息"""
    pass

p = Test()
p.__doc__

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

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

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

5、__del__:构造方法,当对象在内存中释放是,自动触发执行,不过Python是高级语言,有自己的一套触发回收机制

6、__call__:对象后面的括号触发执行的

__init__在创建对象是执行,即:对象 = 类()
__call__是是有对象后面的括号触发的,即 对象() 或 类()()

class Test:
    def __init__(self):
          pass

    def __call__(self):
          print("__call__")

p = Test()  # 调用__init__

p()  # 调用__call__

7、__dict__:返回类或对象中的所有成员

8、__str__:如果定义了这个方法,在打印对象时,默认输出改方法的返回值

9、__getotem__、__setitem__、__delitem__:用于索引操作,如字典,以上分别表示获取、设置、删除数据

class Test:
    def __init__(self):
        self.dic = {}

    def __getitem__(self, item):
        if item in self.dic:
            return self.dic[item]
        return None

    def __setitem__(self, key, value):
        self.dic[key] = value

    def __delitem__(self, key):
        del self.dic[key]


p = Test()
p['laoer'] = 12
print(p['laoer'])   # 12 
print(p['laoli'])   # None
del p['laoer'] 
print(p['laoer'])   #None

10、__getslice____setslice____delslice__:用于切片操作,如列表

11、__iter__:用于迭代器,之所以列表、元组、字典可以进行for循环,就是因为类型定义了iter


class Test:
    def __init__(self, list):
        self.dic = list

    def __iter__(self):
        return iter(self.dic)


p = Test([2, 34, 32, 12])
for i in p:
    print(i)

12、其他的特殊成员以后慢慢补充

上一篇 下一篇

猜你喜欢

热点阅读