【Python入门篇】面向对象(第三部分)

 1、访问限制

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

class Student(object):

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

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

  从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的namescore属性。如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。如:

class Student(object):

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

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

  这样就无法从外部访问实例变量.__name实例变量.__score了,这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。

  但是如果外部代码需要获取内部变量怎么办?需要修改socre怎办?可以给Student类增加以下这样的方法:

复制代码
class Student(object):
    ...

    def get_name(self):
        return self.__name

    def get_score(self):
        return self.__score

    def set_score(self, score):
        self.__score = score
复制代码

 2、获取对象信息

  如果要判断一个对象的类型时,怎么办?

  2.1 type()

  对于基本类型都可以用type()类判断:

print(type(123))
----------><class 'int'>
print(type('string'))
----------><class 'str'>

  2.2 isinstance()

  对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用isinstance()函数。

  如下一个具有继承关系的class来说:

object -> Animal -> Dog -> Husky

  那么,isinstance()就可以告诉我们,一个对象是否是某种类型。

>>> a = Animal()
>>> d = Dog()
>>> h = Husky()

  结果:

复制代码
>>> isinstance(h, Husky)
True

>>> isinstance(h, Dog)
True

>>> isinstance(h, Animal)
True

>>> isinstance(d, Dog) and isinstance(d, Animal)
True

>>> isinstance(d, Husky)
False
复制代码

 

posted @   Mr·Xu  阅读(175)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
点击右上角即可分享
微信分享提示