python _、__和__xx__

本文介绍了Python中单下划线和双下划线的使用规则,包括私有属性的提示、`__xx__`魔法方法的含义和用途,如构造函数`__init__`、析构函数`__del__`等,并通过示例展示了这些概念的实际应用。
摘要由CSDN通过智能技术生成

title: python _、和__xx
top: 41
date: 2021-08-02 11:19:39
tags:

  • 小知识

categories:

  • python

_xx 单下划线开头

Python中没有真正的私有属性或方法,可以在你想声明为私有的方法和属性前加上单下划线,以提示该属性和方法不应在外部调用.如果真的调用了也不会出错,但不符合规范.

#!/usr/bin/env python
# coding:utf-8
class Test():
    def __init__(self):
        pass
    def _one_underline(self):  # 定义私有方法,都只能被类中的函数调用,不能在类外单独调用
        print "_one_underline"
    def __two_underline(self): # 防止类被覆盖,都只能被类中的函数调用,不能在类外单独调用
        print("__two_underline")
 
    def output(self):
        self._one_underline()
        self.__two_underline()
if __name__ == "__main__":
    obj_test=Test()
    obj_test.output()
'''
#输出结果为:
localhost:attempt_underline a6$ python undeline.py
_one_underline
__two_underline
'''

"__"双下划线

这个双下划线更会造成更多混乱,但它并不是用来标识一个方法或属性是私有的,真正作用是用来避免子类覆盖其内容。我们创建一个以"__"两个下划线开始的方法时,这意味着这个方法不能被重写,它只允许在该类的内部中使用。

#!/usr/bin/env python
# coding:utf-8
class A(object):
    def __method(self):
        print("I'm a method in A")
    def method(self):
        self.__method()
        
class B(A):
    def __method(self):
        print("I'm a method in B")
 
if __name__ == "__main__":
    a = A()
    a.method()
    b = B()
    b.method()
'''
# 输出结果为:
localhost:attempt_underline a6$ python undeline.py
I'm a method in A
I'm a method in A
'''

"__xx__"前后各双下划线

__xx__”经常是操作符或本地函数调用的magic methods。类属性可以来自类自定义自身,也可能根据类定义继承的,一个对象的属性还可能是该对象的实例定义的,叫做对象属性。对象的属性储存在对象的__dict__属性中,__dict__为一个词典,键为属性名,对应的值为属性本身。

属性:
__doc__:帮助说明,将字符串写在对象定义声明之下
__module__:模块名,就是文件的名字(无后缀)部分
__class__:返回对象的类信息
__dict__:存储对象属性/方法的字典
__slots__:设置一个元祖,限定允许绑定的属性名称(不能动态添加以外的属性),
只能对当前类起效,对子类不起效(除非在子类中也定义__slots__),这样,子类
允许定义的属性就是自身的__solots__加上父类的__slots__   
############################################################ 

类的专有方法:
__init__:  构造函数,在生成对象时调用
__del__: 析构函数,释放对象时使用
__repr__: 打印 转换
__setitem__: 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__div__: 除运算
__mod__: 求余运算
__pow__: 乘方
# example 1
class CrazyNumber(object):
    def __init__(self, n):
        self.n = n
    def __add__(self, other):
        return self.n - other
    def __sub__(self, other):
        return self.n + other
    def __str__(self):
        return str(self.n)

    
num = CrazyNumber(10)
print(num) # 10
print(num + 5) # 5
print(num - 20) # 30
# example 2
class Room(object):
    def __init__(self):
        self.people = []
 
    def add(self, person):
        self.people.append(person)
        self.people.append(person)
        self.people.append(person)
 
    def __len__(self):
        return len(self.people)
 
 
room = Room()
room.add("Igor")
print(len(room))  # 3

参考链接

[1] python _、__和__xx__的区别

[2] python __xx__的定义和用处

>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值