美文网首页
python类的访问限制

python类的访问限制

作者: 猛犸象和剑齿虎 | 来源:发表于2019-08-26 08:02 被阅读0次
class Student():
    def __init__(self,name,score):
        self.name=name
        self.score=score
bart=Student("张三",55)
print(bart.name)
print(bart.score)

结果

张三
55

面向对象编程的一个重要特点就是数据封装,访问数据有时候没有必要从外部的函数访问,可以在内部定义函数访问,这就是数据封装。

class Student():
    def __init__(self,name,score):
        self.name=name
        self.score=score

    def print_score(self):
        print("%s:%s" %(self.name,self.score))

bart=Student("张三",55)
print(bart.name)
print(bart.score)
bart.print_score()

结果:

张三
55
张三:55

封装的另一个好处是为类增加新的方法。

class Student():
    def __init__(self,name,score):
        self.name=name
        self.score=score

    def print_score(self):
        print("%s:%s" %(self.name,self.score))

    def get_grade(self):
        if self.score>90:
            return "a"
        elif self.score>=60:
            return "b"
        else:
            return "c"
bart=Student("张三",55)
print(bart.name)
print(bart.score)
bart.print_score()
print(bart.get_grade())

结果:

张三
55
张三:55
c

在类的内部,既可以有属性也可以有方法,从类的外部调用属性和方法,隐藏了内部复杂的逻辑,但是外部代码仍然可以自由地修改属性。

class Student():
    def __init__(self,name,score):
        self.name=name
        self.score=score

    def print_score(self):
        print("%s:%s" %(self.name,self.score))

    def get_grade(self):
        if self.score>90:
            return "a"
        elif self.score>=60:
            return "b"
        else:
            return "c"
bart=Student("李四",88)
bart.score=12
print(bart.score)

结果:

12

想要内部属性不被外部访问,可以将属性的名称前加上两个下划线__变成一个私有变量,只能在内部访问,不能从外部访问。

class Student():
    def __init__(self,name,score):
        self.__name=name
        self.__score=score

    def print_score(self):
        print("%s:%s" %(self.__name,self.__score))

bart=Student("wang无",822)
print(bart.__score)

结果:会报错

    print(bart.__score)
AttributeError: 'Student' object has no attribute '__score'

如果想要获取内部属性,可以为类增加一些方法。

class Student():
    def __init__(self,name,score):
        self.__name=name
        self.__score=score

    def print_score(self):
        print("%s:%s" %(self.__name,self.__score))

    def get_name(self):
        return self.__name
    def get_score(self):
        return self.__score

bart=Student("wang无",822)
bart.print_score()
print(bart.get_name())

结果:

wang无:822
wang无

如果又想外部数据修改内部属性,可以增加一个方法。

class Student():
    def __init__(self,name,score):
        self.__name=name
        self.__score=score

    def print_score(self):
        print("%s:%s" %(self.__name,self.__score))

    def get_name(self):
        return self.__name
    def get_score(self):
        return self.__score
    def set_score(self,score):
        self.__score=score

bart=Student("wang无",822)
bart.print_score()
print(bart.get_name())
bart.set_score(77)
print(bart.get_score())

结果

wang无:822
wang无
77

在python中,***以双下划线开头,并以双下滑线结尾的是特殊变量,可以直接访问。

相关文章

  • python类的访问限制

    结果 面向对象编程的一个重要特点就是数据封装,访问数据有时候没有必要从外部的函数访问,可以在内部定义函数访问,这就...

  • 用电脑回收站的数据保护机制:理解python类成员保护和访问限制

    类成员保护和访问限制有什么用 python类的成员可以通过“成员保护和访问限制的机制”非常大程度地禁止类实例对象对...

  • python 限制访问

    上次在学习python class的时候,我们在class内部定义了属性,在class外部,我们可以通过 实例去访...

  • 【Django】有效解决TypeError: BlockedIP

    最近在使用django进行开发时,添加中间件类对某些ip进行访问限制,中间件类代码如下: 通过python man...

  • python学习-访问限制

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻...

  • 15.封装

    访问修饰符(public private internal protected) 封装:对类和成员的访问进行限制 ...

  • java中类的访问限制

    1.解析 Java有四种访问权限, 其中三种有访问权限修饰符,分别为private,public和protecte...

  • Python面向对象编程 -- 类和实例、访问限制

    面向对象编程 Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象...

  • python面向对象2

    1.权限访问: 2.python中类的内容的访问权限 严格来说,python类中的内容只有公开的;私有化是假的私有...

  • Java基础知识回顾

    1、面向对象的三大特性:封装、继承、多态 封装:对类的访问进行限制,决定了哪些类有权限访问这个类。在Java上表示...

网友评论

      本文标题:python类的访问限制

      本文链接:https://www.haomeiwen.com/subject/xlxqectx.html