首页 > 编程语言 >python——面向对象——知识汇总三

python——面向对象——知识汇总三

时间:2024-03-03 10:11:06浏览次数:19  
标签:Python name python self 汇总 面向对象 add 父类 属性

Python封装机制及实现方法

 

封装(Encapsulation),即在设计类时,刻意地将一些属性和方法隐藏在类的内部,这样在使用此类时,

将无法直接以“类对象.属性名”(或者“类对象.方法名(参数)”)的形式调用这些属性(或方法),

而只能用未隐藏的类方法间接操作这些隐藏的属性和方法。

 

 

 

 

Python 类中的变量和函数,不是公有的(类似 public 属性),就是私有的(类似 private),这 2 种属性的区别如下:

  • public:公有属性的类变量和类函数,在类的外部、类内部以及子类中,都可以正常访问;
  • private:私有属性的类变量和类函数,只能在本类内部使用,类的外部以及子类都无法使用。


但是,Python 并没有提供 public、private 这些修饰符。为了实现类的封装,Python 采取了下面的方法:

  • 默认情况下,Python 类中的变量和方法都是公有(public)的,它们的名称前都没有下划线(_);
  • 如果类中的变量和函数,其名称以双下划线“__”开头,则该变量(函数)为私有变量(私有函数),其属性等同于 private。


除此之外,还可以定义以单下划线“_”开头的类属性或者类方法(例如 _name、_display(self)),这种类属性和类方法通常被视为私有属性和私有方法,虽然它们也能通过类对象正常访问,但这是一种约定俗称的用法。

注意,Python 类中还有以双下划线开头和结尾的类方法(例如类的构造函数__init__(self)),这些都是 Python 内部定义的,用于 Python 内部调用。我们自己定义类属性或者类方法时,不要使用这种格式。

 

 

 

class CLanguage:
    def setname(self, name):
        if len(name) < 3:
            raise ValueError('名称长度必须大于3!')
        self.__name = name

    def getname(self):
        return self.__name

    # 为 name 配置 setter 和 getter 方法
    name = property(getname, setname)

    def setadd(self, add):
        if add.startswith("http://"):
            self.__add = add
        else:
            raise ValueError('地址必须以 http:// 开头')

    def getadd(self):
        return self.__add

    # 为 add 配置 setter 和 getter 方法
    add = property(getadd, setadd)

    # 定义个私有方法
    def __display(self):
        print(self.__name, self.__add)


clang = CLanguage()
clang.name = "C语言中文网"
clang.add = "http://c.biancheng.net"
print(clang.name)
print(clang.add)

 

 

 

 

 

 

 

 

Python继承机制及其使用

 

 

 

继承机制经常用于创建和现有类功能类似的新类,又或是新类只需要在现有类基础上添加一些成员(属性和方法),但又不想直接将现有类代码复制给新类。

也就是说,通过使用继承这种机制,可以轻松实现类的重复使用。

 

 

 

 

子类继承父类时,只需在定义子类时,将父类(可以是多个)放在子类之后的圆括号里即可。语法格式如下:

class 类名(父类1, 父类2, ...):
    #类定义部分

 

 

 

注意,如果该类没有显式指定继承自哪个类,则默认继承 object 类(object 类是 Python 中所有类的父类,即要么是直接父类,要么是间接父类)。

另外,Python 的继承是多继承机制(和 C++ 一样),即一个子类可以同时拥有多个直接父类。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

123

 

123

标签:Python,name,python,self,汇总,面向对象,add,父类,属性
From: https://www.cnblogs.com/xiaobaibailongma/p/18049636

相关文章

  • Python 潮流周刊第 40 期(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。周刊全文:https://pythoncat.top/posts/2024-03-02-weekly以下是本期摘要:......
  • Python模块之urllib url编码
    模块作用简介:Python模块之urlliburl编码官方英文帮助:https://docs.python.org/3/library/官方简体中文帮助:https://docs.python.org/zh-cn/3/library/必要操作:>>>importurllib安装:python3内置函数,无需安装如果像在py3里装py2的版本,需要指定版本号例......
  • What does -> mean in Python function definitions?
    Whatdoes->meaninPythonfunctiondefinitions?InPython,the"->"symbolisusedtoindicatethereturntypeofafunction.ItispartofthefunctiondefinitioninaPython3.5orlater.Forexample,thefollowingcodedefinesafunct......
  • 群晖小技巧汇总
    1.docker配置国内源cd/var/packages/ContainerManager/etc/cpdockerd.jsondockerd.json.bakvidockerd.json将docker.json文件修改如下{"data-root":"/var/packages/ContainerManager/var/docker","log-driver":"db","registry-mir......
  • 谷歌扩展V2升级V3一些功能的汇总
     扩展的页面通信service-worker.js(原v2版本的background.js)与popup页面的通信popup页面不能直接使用缓存(cookie等),必须在service-worker等页面使用,使用sendMessage与service-worker通信,在service-worker获取到缓存后再回传给popup页面js页面与扩展的通信:js插件里使用wind......
  • python推导式(comprehension)
    #推导式#1.zip()函数##功能:将多个迭代器Iterator对象或者可迭代对象中的元素压缩在一起,返回一个zip对象##zip对象既是一个可迭代对象也是一个迭代器对象names=["Tony","Tom","Gray","Lisa"]grades=[11,22,31,21]chart1=zip(names,grades)print(list(ch......
  • python 正则表达式
    正则表达式(regularexpression)关于这个知识点菜鸟教程上介绍的很详细还有一个是介绍各种语言的正则表达式的正则表达式是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个“规则”,检查一个字符串是否与这种规则匹配来实现对字符的进行过滤。正则表达......
  • Selenium自动化爬取网页数据——Python实现
    Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,MozillaFirefox,Safari,GoogleChrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得工作在不同浏览器和操作......
  • pytest踩坑汇总
     pytest简易教程汇总,详见:https://www.cnblogs.com/uncleyong/p/17982846问题一:pytest参数化时出现unicode编码问题详见:https://www.cnblogs.com/uncleyong/p/18022091 pycharm中执行 配置文件pytest.ini中添加:disable_test_id_escaping_and_forfeit_all_rights_to_......
  • python的基础知识
    python的保留字与运算符的区别保留字是Python语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。在实际开发中,如果使用Python中的保留字作为标识符,则解释器会提示“invalidsyntax”的错误......