Python学习 :面向对象 -- 成员修饰符

  成员修饰符

  两种成员

  - 公有成员

  - 私有成员, __字段名

                  - 无法直接访问,只能通过内部方法来间接访问私有成员

  简例:公有成员与私有成员 

class Info:country = '中国'  # 静态字段    __gender = '男'   # 静态字段私有化def __init__(self,name,age):self.name = nameself.__age = age  # age字段为私有的,外部无法直接访问def show(self):return self.__age,Info.__genderdef __get(self):print('私有方法')def gain(self):r = self.__get()return robj = Info('alex',19)
print(obj.name)
# print(obj.__age)  # 此时会报错,无法访问
res = obj.show()    # 方法在类中,故能通过方法在内部访问私有字段
print(res)
# obj.__get()       # 此时也会报错,无法访问
obj.gain()          # 通过内部方法来访问
>>>>>>>>>
alex
(19, '男')
私有方法

  特殊成员

  - __init__ 类()自动执行

  - __call__ 对象() 类()() 自动执行

  - __int__ int() 执行

  - __str__ str() 执行

  - __dict__ 对象.__dict__ 执行,将对象中封装的所有内容以字典的形式返回

  简例:__call__方法

class Info:def __init__(self):print('init')def __call__(self, *args, **kwargs):        # 对象() 自动执行print('call')obj = Info()
obj()       # 只执行__call__方法
Info()()    # 相当于 obj()()
>>>>>>>>>
init
call
init
call

  简例:__int__方法 __str__方法 __dict__方法 __getitem__方法

class Info:def __init__(self,name,age):self.name = nameself.age  = age# int 对象,自动执行__int__方法,并将返回值赋值给int对象def __int__(self):return 0# str 对象,自动执行__str__方法,并将返回值赋值给str对象def __str__(self):return '%s - %s' %(self.name,self.age)def __getitem__(self, item):return itemobj = Info('alex',20)
print(obj)              # 实际上 print()执行print(str(obj))
d = obj.__dict__
print(d)
res = Info.__dict__     # 查看类中的内容
print(res)
li = Info('mike',22)
res = li['APPLE']             # 自动执行 li 对象的类中的 __getitem__方法,’APPLE‘作为参数传递给item
print(res)
>>>>>>>>>
alex - 20
{'name': 'alex', 'age': 20}
{'__int__': , '__getitem__': , '__str__': , '__dict__': <attribute '__dict__' of 'Info' objects>, '__init__': , '__doc__': None, '__weakref__': <attribute '__weakref__' of 'Info' objects>, '__module__': '__main__'}
APPLE

  metaclass , 类的本源 type

  python中一切的事物都是对象,在调用类的时候都会经过 type类,python中默认 metaclass = type

  简例:创建一个Mytype类来继承type类中的方法,在Mytype类中可以自定义自己需要的方法,而不必要一定执行type类中的方法

class Mytype(type):def __init__(self,*args,**kwargs):# self = Info类super(type, self).__init__()def __call__(self,*args,**kwargs):# self = Info类obj = self.__new__(self,*args,**kwargs)# 此时 r 为 Info类中的 __new__方法中返回的对象self.__init__(obj)class Info(object,metaclass=Mytype):def __init__(self):print('hello world')
# obj = Info() 其实就是调用了类中的 __new__方法来创建obj对象def __new__(cls,*args,**kwargs):return object.__new__(cls,*args,**kwargs)# 此时创建了对象def func(self):print('hi world')obj = Info() >>>>>>>>> hello world

  值得注意的是obj 是对象,属于Info类

  Info类也是对象 ,只不过是type类中的对象,type其实也是一个类

  实际上类在执行阶段的执行顺序是: 对象 = 类() -- type类中的__call__方法 -- 类()中的__new__方法 -- 类中的 __init__方法 ;而并非之前所说的简单地调用了 __init__ 方法

转载于:https://www.cnblogs.com/ArticleYeung/p/10500105.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[vue] SPA首屏加载速度慢的怎么解决?

[vue] SPA首屏加载速度慢的怎么解决&#xff1f; 1.通过Gzip压缩 2.使用路由懒加载 3.利用webpack中的externals这个属性把打包后不需要打包的库文件都分离出去&#xff0c;减小项目打包后的大小 4.使用SSR渲染个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放…

Visual Basic .NET处理Excle表格全接触

Visual Basic .Net处理Excel表格机理和处理Word文档一样&#xff0c;也是通过互操作&#xff0c;引入COM组件来实现的&#xff0c;所以前提条件是运行本文中介绍的程序的计算机必须安装Office 2000中的Excel软件。如果计算机安装的Office 2000&#xff0c;那么这个COM组件就是M…

java读文件几种方式_Java读取文件的几种方式

import java.io.*;public class ReadFromFile {/*** 以字节为单位读取文件&#xff0c;常用于读二进制文件&#xff0c;如图片、声音、影像等文件。*/public static void readFileByBytes(String fileName) {File file new File(fileName);InputStream in null;try {System.o…

Django-视图层

视图函数 视图函数&#xff0c;简称视图&#xff0c;是一个简单的Python 函数&#xff0c;它接受Web请求并且返回Web响应。 无论视图本身包含什么逻辑&#xff0c;都要返回响应 请求对象 urls.py from django.contrib import admin from django.urls import path,re_pathfrom a…

aspnet_UsersInRoles_GetUsersInRoles

ALTERPROCEDUREdbo.aspnet_UsersInRoles_GetUsersInRoles --查询某角色的用户ApplicationNameNVARCHAR(256), RoleNameNVARCHAR(256)ASBEGINDECLAREApplicationIdUNIQUEIDENTIFIERSELECTApplicationIdNULLSELECTApplicationIdApplicationId FROMaspnet_Applications WHERELO…

[vue] 你认为vue的核心是什么?

[vue] 你认为vue的核心是什么&#xff1f; 两部分 一部分 数据->虚拟dom->dom, 另一部分 响应式数据 这两部分大大节省了开发者对数据变动转换到页面显示的操作&#xff0c;可以让开发者聚焦业务&#xff0c;聚焦数据的处理。个人简介 我是歌谣&#xff0c;欢迎和大家一…

java keyadapter_在java中使用keyAdapter和keyEvent时出错

我是编程的初学者&#xff0c;我一直在研究一个小项目&#xff0c;众所周知的叫做Tetris的游戏&#xff0c;我遇到了这个小问题&#xff0c;我希望你能帮助我解。我导入了&#xff1a;import java.awt.event.KeyAdapter和 import java.awt.event.KeyEvent能够使用我的键盘玩游戏…

luogu4365 秘密袭击 (生成函数+线段树合并+拉格朗日插值)

求所有可能联通块的第k大值的和&#xff0c;考虑枚举这个值: $ans\sum\limits_{i1}^{W}{i\sum\limits_{S}{[i是第K大]}}$ 设cnt[i]为连通块中值>i的个数 $ans\sum\limits_{i1}^{W}{i\sum\limits_{S}{[cnt[i]>K]-[cnt[i1]>K]}}$ $ans\sum\limits_{i1}^{W}{\sum\limits_…

学习程序开发的方法,仅供参考吧

感觉很多学习程序开发的新手&#xff0c;方法不对&#xff0c;浪费了大量时间。而j2ee由于技术分支多&#xff0c;学习的人更是找不到主线。其实很多东西&#xff0c;说白了很简单的。 还是那句老话&#xff0c;怕就怕走错路&#xff0c;走对了其实很容易。 j2ee害人的地方就是…

[vue] vue常用的修饰符有哪些?列举并说明

[vue] vue常用的修饰符有哪些&#xff1f;列举并说明 .trim .number .stop .prevent个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

java对象流读取完毕_从Java 8流中获取具有最大频率的对象

我有一个带有city和zip字段的对象,我们称之为Record.public class Record() {private String zip;private String city;//getters and setters}现在,我有一些这些对象的集合,我使用以下代码通过zip对它们进行分组&#xff1a;final Collection records; //populated collection…

Jenkins二 安装gitlab及其使用

git --version 如果没有安装git直接源码安装即可&#xff0c;如果安装了先删除原来的git。 yum -y remove git先安装编译git需要的包。 yum install zlib-devel perl-CPAN gettext curl-devel expat-devel gettext-devel openssl-devel下载&安装 去gitlab官网 https://abou…

编程使用资源文件实现多语言页面(In Action)

需求&#xff1a;我们的ASP.NET站点需要提供多语言支持&#xff0c;考虑到我们使用的是ASP.NET2.0&#xff0c;我们可以利用资源文件来实现。 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />NOTE:这里我们使用编程的方法实现&a…

[vue] vue怎么获取DOM节点?

[vue] vue怎么获取DOM节点&#xff1f; 1、document.getElementById("id")2、this.$refs.xx还有一些特殊的&#xff0c;比如this.$root、this.$parent、this.$children个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一…

java final内存机制_Java中的内存处理机制和final、static、final static总结

装载自&#xff1a;http://blog.csdn.net/wqthaha/article/details/20923579Java程序运行在JVM上&#xff0c;可以把JVM理解成Java程序和操作系统之间的桥梁&#xff0c;JVM实现了Java的平台无关性&#xff0c;由此可见JVM的重要性。所以在学习Java内存分配原理的时候一定要牢记…

[vue] vue过渡动画实现的方式有哪些?

[vue] vue过渡动画实现的方式有哪些&#xff1f; 1.使用vue的transition标签结合css样式完成动画 2.利用animate.css结合transition实现动画 3.利用 vue中的钩子函数实现动画个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很…

MySQL中的字符集涵义及使用方法总结(二)

五.乱码的避免最好让上述9个字符集变量值保持一致&#xff0c;或者至少“兼容”&#xff0c;同时也要考虑到OS中locale的值。当然&#xff1a;character_set_system例外&#xff0c;它是存储和表示元信息使用的字符集&#xff0c;一般都是ascii串&#xff0c;使用utf8和使用lat…

vim 多行添加注释,取消注释

转发 已经验证 https://blog.csdn.net/SuiXin_123/article/details/81393397转载于:https://www.cnblogs.com/pingg/p/10509301.html

c java c时间格式处理_c:foreach 对时间类型进行格式化

程序(三)Input parameters:Date: 2004/04/01:13:30:00Java format: Thu Apr 01 13:30:00 CST 2004isoDate: 20040531T235959Java format: Mon May 31 23:59:59 CDT 200DatesTag OutputAttribute: value; required. Tag has no body. 注释&#xff1a;value属性 日期对象200…

[vue] vue父子组件双向绑定的方法有哪些?

[vue] vue父子组件双向绑定的方法有哪些&#xff1f; 1.利用对象的引用关系来实现 2.父子组件之间的数据传递 3.使用.sync修饰符个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通…