Python是一种面向对象的编程(OOPS)语言,其中类是不可或缺的。课程在面向对象的编程中非常强大,以至于我们可以执行继承,抽象,封装和多态性等高级任务。
简而言之,Python类提供了一种组织代码,封装数据和行为,为对象创建可重复使用的模板并实现继承的方法。课程提供了一种强大的方法来组织和管理复杂的代码,促进可重复性并使代码易于阅读和理解。
我们可以控制Python类内的变量和方法的访问。访问修饰符用于控制对变量和方法的访问。
访问修饰符
访问修饰符在保护数据免于未经授权的访问和防止任何数据开发方面发挥着重要作用。
使用下划线(_
),我们可以控制对Python类中数据的访问。 Python类有三种类型的访问修饰符:
-
公共访问修饰符
-
私人访问修饰符
-
受保护的访问修饰符
让我们了解上述访问修饰符一个一个。
公共访问修饰符
名称“ public ”都说明了有关此访问修改器的所有内容,该类别可以访问特定python类内声明的变量和方法,以及该类别外部的任何python类。
。公共方法可在班级外访问,借助对象,可以在课堂内调用公共方法。
python类中的所有变量和方法默认情况下 public ,就像上面可以从类环境外部访问上面的那样。这是一个可以帮助我们更好地理解的示例。
class Hero:
def __init__(self, real_name, reel_name, hero_name):
self.real_name = real_name
self.reel_name = reel_name
self.hero_name = hero_name
hero = Hero("RDJ", "Tony Stark", "Iron Man")
print("Real name: ", hero.real_name)
print("Reel name: ", hero.reel_name)
print("Hero name: ", hero.hero_name)
在上面的代码中,我们定义了一个名为Hero
的Python类,其中我们创建了一个构造函数,该构造函数接受三个名为real_name
,reel_name
和hero_name
的参数。
然后,我们在类外部创建了一个称为hero
的变量,并使用相应的参数实例化了Hero
,然后打印了值。
Real name: RDJ
Reel name: Tony Stark
Hero name: Iron Man
在这里,real_name
,reel_name
和hero_name
是公共数据成员,可以在程序中的任何地方使用。我们还可以在班级内创建一个公共成员功能并访问它。以下示例将显示如何做。
class Hero:
def __init__(self, real_name, reel_name, hero_name):
self.real_name = real_name
self.reel_name = reel_name
self.hero_name = hero_name
def display_name(self):
print("Real name :", self.real_name)
print("Reel name :", self.reel_name)
hero = Hero("Chris Evans", "Steve Rogers", "Captain America")
hero.display_name()
print("Hero name: ", hero.hero_name)
在上面的代码中,display_name
是公共成员功能,我们在同类课程外访问了它。该代码将在没有任何错误的情况下运行。
Real name : Chris Evans
Reel name : Steve Rogers
Hero name: Captain America
我们也可以在其他函数中使用这些变量,以下代码显示了如何做。
def access_public_data():
x = Hero("Andrew Garfield", "Peter Parker", "Spider-man")
print("Real name: ", x.real_name)
print("Reel name: ", x.reel_name)
print("Hero name: ", x.hero_name)
access_public_data()
我们创建了一个名为access_public_data
的函数,并实例化了Hero
的类,并通过了所需的参数并将其称为该函数。由于Hero
类中的变量是公开的,因此代码将不会出现任何错误。
Real name: Andrew Garfield
Reel name: Peter Parker
Hero name: Spider-man
受保护的访问修饰符
受保护的变量和方法可在特定类环境中访问,也可以由子类访问。我们还可以说,它允许子类的资源由子类继承。
单个下划线(_
)的任何变量或方法都受到保护,并且可以在特定类环境中访问。可以在父类的子类内访问受保护的变量/方法。
这是一个代码,可以在Python类中制作受保护的变量/方法。
class Anime:
_rating = "Best"
def __init__(self, anime, release_year):
self._anime = anime
self._release_year = release_year
def _show(self):
print("Release:", self._release_year)
obj = Anime("Naruto", 2002)
print("Anime:", obj._anime)
obj._show()
在上面的代码中,_anime
和_release_year
在类Anime
内部受保护的实例变量,并且具有一个称为_show
的受保护函数。
在下一个代码块中,我们实例化了Anime
类,并传递了所需的参数,并将它们存储在名为obj
的对象中,然后通过调用 preected 函数和变量来显示结果。
Anime: Naruto
Release: 2002
我们还可以在派生类中访问这些受保护的实例变量和受保护的功能。
# Derived class
class Other_Anime(Anime):
def __init__(self, anime, year):
Anime.__init__(self, anime, year)
def show_anime(self):
print("Anime:", self._anime)
self._show()
x = Other_Anime("Demon Slayer", 2019)
x.show_anime()
在上面的代码中,创建了Other_Anime
类,该类别继承了Anime
类,我们定义了名为show_anime
的公共函数,该功能访问了 procected Anime
的变量。
我们称 public 函数以显示受保护变量的结果。
Anime: Demon Slayer
Release: 2019
您可能会认为Anime
类的受保护变量在类环境之外也可以访问。受保护的变量和功能可以由派生类和任何其他类访问,但这是好程序员的唯一责任,不使用特定类环境之外的受保护的数据成员。
私人访问修饰符
我们可以通过看到其名称为“ private ”访问修饰符将特定类中声明的变量和方法限制为该类环境中的变量和方法。
简而言之,可以在该类环境中而不是在该类外部访问类中声明的变量和方法。 Python没有任何机制限制对变量或方法的访问。
但是,有一种方法可以施加限制,以访问Python中的变量和方法。 Python建议使用双重下划线模仿私人访问修饰符的行为。
double undasscore (__
)之前的变量和方法使它们私密,无法在特定类之外访问。让我们以一个例子来理解它。
class Superhero:
__hero = "Iron Man"
def __init__(self, name):
self.__name = name
obj = Superhero("Shaktiman")
print(obj.__name)
在上面的代码中,创建了Superhero
类,我们创建了名为__hero
的私有变量和名为__name
的私有实例变量。然后,我们实例化了课程并通过了所需的参数,并试图访问私人数据。
Traceback (most recent call last):
...
print(obj.__name)
AttributeError: 'Superhero' object has no attribute '__name'
我们得到了 attributeError 说Superhero
类没有称为__name
的属性,这是因为类中的私人数据在类外部无法访问。但是我们可以访问类中的私人变量和方法。
class Superhero:
def __init__(self, name):
self.__name = name
def displayname(self):
print("Hero:", self.__name)
obj = Superhero("Shaktiman")
obj.displayname()
在上面的代码中,我们创建了一个名为displayname
的公共功能,该功能访问了类内部的私有变量__name
,我们尝试打印输出。
Hero: Shaktiman
代码没有任何错误运行,我们得到了我们预期的输出。
python防止私人数据在班级外访问,因此它确实 name mangling ,这意味着它改变了访问私人数据的过程。
我们可以访问班级的私人数据,以下示例将向您展示如何做。
class Superhero:
__hero = "Iron Man"
def __init__(self, name):
self.__name = name
obj = Superhero("Shaktiman")
print(obj._Superhero__name)
print(obj._Superhero__hero)
我们尝试了名称范围过程,该过程有助于我们访问班级外的变量。我们添加了_Superhero
,这是我们的基类的名称,然后将私有变量添加到类对象obj
。
Shaktiman
Iron Man
我们成功访问了班级外的__name
和__hero
变量。
结论
python使用特定的命名约定在类内部进行任何变量/方法,以及python类内定义的所有变量和方法默认情况下是公开的。
公共数据属性可通过任何类和功能访问,受保护的数据属性只能在类环境中访问,并且在子类内部也可以访问,并且私人数据属性只能在类中访问。
。我们了解了公众,受保护和私人访问修饰符,这些修饰符用于限制访问Python类的变量和方法。
ð如果您喜欢本文,您可能会喜欢的其他文章
A modern way to perform string interpolation using f-string in Python。
Integrate the PostgreSQL database with Python。
Build a custom deep-learning model using the transfer learning technique。
8 different ways by which you can reverse a Python list。
Powerful one-liners in Python to enhance your code。
Take multiple inputs from the user in a single line in Python。
这就是目前的全部
保持编码