以下是 “通俗易懂详解Python基础五种下划线作用”的完整攻略。
一、Python中的下划线
Python中的下划线有多种用途,包括变量名、函数名、类名等等。在Python中,下划线主要有五种不同的用法,分别是单前导下划线、单末尾下划线、双前导下划线、双前导双下划线和双前导后末尾双下划线。
二、单前导下划线
单前导下划线用来指示一个变量或者方法是“非公有的”,即不应该被外部使用。在Python中,没有真正的“私有”变量或方法,通过在变量或方法名前加上单前导下划线,可以起到隐藏其真正含义的作用,但是仍然可以从类外部访问这些属性。
示例代码:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
def get_name(self):
return self._name
p = Person("Tom", 25)
print(p.get_name()) # 输出 Tom
print(p._name) # 输出 Tom
在上面的示例代码中,我们通过使用单前导下划线来指示 name 和 age 是私有属性。在类外可以使用 _name
来访问该属性,但是在类外最好使用 get_name
方法来访问 name
属性,以保证代码的封装性和可维护性。
三、单末尾下划线
单末尾下划线用来避免与Python关键字发生冲突。例如,如果你想把变量命名为“class”,你可以使用“class_”来避免语法错误。
示例代码:
class_ = "Python Basic"
print(class_)
输出:
Python Basic
四、双前导下划线
双前导下划线用来指示一个方法或属性是“私有的”。在使用双前导下划线定义的方法或属性只能在类的内部使用,而不可以在子类和类外部使用。如果在类外部使用,会抛出 AttributeError 异常。
示例代码:
class Person:
def __init__(self, name, age):
self.__name = name
self.__age = age
def __get_name(self):
return self.__name
p = Person("Tom", 25)
print(p._Person__get_name()) # 输出 Tom
print(p.__name) # 抛出 AttributeError 异常
在上面的示例代码中,我们使用双前导下划线来定义 __name
和 __age
两个私有属性,在类内部使用 __get_name
方法来访问 __name
属性,在类外无法直接访问 __name
属性,如果在类外使用会抛出 AttributeError 异常。
五、双前导双下划线
双前导双下划线用来避免子类覆盖父类的方法,在子类中同名方法会覆盖父类的同名方法。通过在方法名前添加双前导下划线,可以使方法成为私有方法,从而在子类中避免被覆盖。
示例代码:
class Person:
def __init__(self, name):
self.__name = name
def __get_name(self):
return self.__name
def get_name(self):
return self.__get_name()
class Student(Person):
def __get_name(self):
return "Student's Name: "+ self._Person__get_name()
s = Student("Tom")
print(s.get_name()) # 输出 Student's Name: Tom
在上面的示例代码中,我们创建了一个 Person 类,并在其中定义了私有方法 __get_name
和公有方法 get_name
。在子类 Student 中同样定义了同名方法 __get_name
,但是由于它被定义成了私有方法,所以不会覆盖父类中的同名方法,最终在执行 s.get_name()
时,执行的是子类 Student 中的私有方法,返回的是 "Student's Name: Tom"。
六、双前导和末尾双下划线
双前导和末尾双下划线的作用是用来命名 Python 的“魔术方法”。这些方法在Python中有特殊的含义,例如 __init__
、__str__
、__repr__
等等。其中,__init__
方法用来初始化实例对象,在创建新对象后执行;__str__
和 __repr__
方法用来指示 Python 怎样打印对象,输出对象的文本信息。
示例代码:
class Person:
def __init__(self, name):
self.__name = name
def __str__(self):
return "Person's Name: " + self.__name
p = Person("Tom")
print(p) # 输出 Person's Name: Tom
在上面的示例代码中,我们定义了一个 __str__
方法,用来指示 Python 打印对象时应该输出的文本信息。当我们执行 print(p) 时,输出的是 "Person's Name: Tom"。
七、总结
上面介绍的就是Python中下划线的五个作用。其中,单前导下划线和双前导下划线用来指示私有属性或方法;单末尾下划线用来避免关键字冲突;双前导双下划线用来避免子类中同名方法覆盖父类中同名方法;双前导和末尾双下划线用来命名 Python 的魔术方法。
在编写代码时,应该根据实际情况使用合适的下划线,以便代码更加规范、易懂、易于维护。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通俗易懂详解Python基础五种下划线作用 - Python技术站