python --访问限制、继承和多态

Python面向对象之访问限制 为什么要做访问限制, 做访问限制,是为了程序的健壮性。如果可以从外部对函数里面重要的属性进行任意修改,有可能程序崩溃只是因为一次不经意地参数修改。 通过定义私有属性做访问限制 默认情况下,可从外部访问对象的属性。若让属性不能从对象外部访问,可将属性定义为私有。 私有属性只能通过存取器方法来访问 Python没有为私有属性提供直接的支持,要让方法或属性成为私有的(不能从外部访问),只需让其名称以两个下划线打头即可 class Apple(): def name(self,name): 阅读详情

一. 访问限制:

1. 定义

在Class内部,可以有属性和方法,而外部的代码可以通过直接调用实例变量的方法来操作数据。但是这种操作方法有很大的弊端:外部的代码可以自由修改实例中的属性

class Student(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def getScore(self,score):
        print('The student score is %.2f' %score)
student = Student('xiaoming',55)
print(student.age)
student.age = 66
print(student.age)

       这种情况下很不安全,因此很多时候我们要让内部属性不被外部访问,可以在属性的名称前加上两个下划线__,在python中,实例的变量名以__开头就变成一个私有变量(private),只有内部可以访问,外部不可以访问。

class Student(object):
    def __init__(self,name,age):
        self.__name = name
        self.__age = age
    def getScore(self,score):
        print('The student score is %.2f' %score)
student = Student('xiaoming',55)
print(student.age)

 这样就可以保证外部代码不能随意修改对象内部的状态,进行访问控制限制保护,提高了安全性。

那么这样的话,问题就来了,我们要是想让外部获取或者修改私有变量该怎么办?

添加set和get方法

# 允许外部获取
class Student(object):
    ...
 
    def get_name(self):
        return self.__name
 
    def get_score(self):
        return self.__score
# 允许外部修改
class Student(object):
    ...
 
    def set_score(self, score):
        self.__score = score

那么,双下划线开头的实例变量是不是一定不能从外部访问呢?不,我们可以通过"_类名__变量名"来访问,但是不建议,这种方法不能版本的Python会将变量改成不同的变量名。

2. 练习

class Student(object):
    def __init__(self, name, gender):
        self.__name = name
        self.__gender = gender
    def get_gender(self):
        return self.__gender
    def set_gender(self,gender):
        self.__gender = gender
bart = Student('Bart', 'male')
if bart.get_gender() != 'male':
    print('测试失败!')
else:
    bart.set_gender('female')
    if bart.get_gender() != 'female':
        print('测试失败!')
    else:
        print('测试成功!')

二. 继承

1. 定义

在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。

子类可以继承父类的属性、继承父类方法,如果一个方法在父类和子类中都存在,那么子类会将父类中的方法重写。

class Father(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def age(self):
        print('%s is eating...' %self.name)
    def set_goal(self):
        print('%s set a goal' %self.name)
# Son继承于Father类
class Son(Father):
    def eat(self):
        print('%s daoli eating...' %self.name)
father = Father('dsd','24')
son = Son('szy','34')
# 继承父类属性
print(son.name)
# 继承父类方法
son.set_goal()
# 子类重写父类方法
son.eat()

2. 新式类和经典类

新式类是深度优先:是指从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续追踪链接。 

深度优先的顺序是:A-B-D-E-I-C-F-G-H【递归实现】

# python2中深度优化
class D():
    def test(self):
        print('test in D...')
class C(D):
    def test(self):
        print('test in C...')
class B(D):
    pass
    # def test(self):
    #     print('test in B...')
class A(B,C):
    pass
    # def test(self):
    #     print('test in A...')
a = A()
print(a.test())

经典类是广度优先:是指先抓取起始页中的所有网页,然后在选择其中的一个连接网页,继续抓取在此网页中链接的所有网页。

广度优先的顺序为:A-B-C-D-E-F-G-H-I 【队列实现】

# python3中广度优先
class D(object):
    def test(self):
        print('test in D...')
class C(D):
    def test(self):
        print('test in C...')
class B(D):
    pass
    # def test(self):
    #     print('test in B...')
class A(B,C):
    pass
    # def test(self):
    #     print('test in A...')
a = A()
print(a.test())

三. 多态

多态:一个操作的意义取决于被操作对象的类型,相同的消息给予不同的对象会引发不同的动作。多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式在处理多态对象时,只需要关注他的接口即可.同一个操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 

 练习

class Student():
    def get_score(self):
        print('Student score...')
class Chinese():
    def get_score(self):
        print('Chinese score...')
class Math():
    def get_score(self):
        print('Math score...')
student = Student()
chinese = Chinese()
math = Math()
student.get_score()
chinese.get_score()
math.get_score()

 

机械臂的运动学分析-工业机器人 机械臂的运动学是研究机械臂各连杆坐标系之间的运动关系,是对机械臂进行运动控制的基础。本章分析了所设计的六自由度机械臂的运动学。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。理论上六自由度机械臂的工作空间是一个近似球形区域,能够覆盖机械臂所在的位置,但由于机械臂关节的运动范围受到限制,机械臂末端会存在一些不能到达的工作死区,使得机械臂的工作范围和灵活性受到限制。 阅读详情

相关推荐

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

拉曼光谱仪的原理与应用——TFN 7G F660手持式拉曼光谱识别仪

TFN_yzgd的博客 926

Python优缺点总结

Python 优点、缺点 总结

KwokRoot的博客 1210

告别Windows!Oculus Quest 2在Mac M1上的串流实战(scrcpy+SideQuest避坑指南)

本文为Mac M1用户提供了Oculus Quest 2在macOS上实现高清低延迟串流的实战指南。通过使用开源工具scrcpy和SideQuest,绕开官方限制,详细讲解了从环境准备、无线调试到画质与延迟优化的完整步骤,重点解决了Apple Silicon芯片Mac的连接与性能问题,助你告别Windows依赖。

weixin_29224309的博客 308

python/类和实例-访问限制

类和实例 类(Class)和实例(Instance)是面向对象最重要的概念。 类,是抽象的模版(下面的Student类,) 实例,是根据类创建出来的具体的对象,每个对象都拥有相同的方法,但各自的数据可能不同。 Student类为例,定义类: '用class定义类' class Student(object): pass 'class后面是类名(Student),类名通常是以大写开头的单词,紧接着是(object), 表示该类是从哪个类集成下来的,通常,如果没有合适的继承类,就使用object类,这是所有类

fan__lee的博客 785

matlab 用m_map画地形水深图

clear,clc %投影 m_proj('albers equal-area','lat',[5 43],'long',[105 125],'rect','on'); %加载水深文件 [CS,CH]=m_etopo2('contourf',[-7000:500:3000],'edgecolor','none'); %绘制高分辨率陆地和海岸线 m_gshhs_h('patch',[0.1 0.9 ...

qq_44913577的博客 9511

Android 桌面小组件 AppWidgetProvider

桌面小组件,绝对是小程序中的小程序,说白了就是任何复杂一丁点的操作都适合做成桌面小组件。所以这里采用的演示的例子,就只有一个白色圆角背景,外加一个文本框,显示文字。小组件的教程网上一搜一大堆,所以我这里主要就是介绍一些坑的地方,跟大致处理流程,具体细节还得看其他大神的骚操作。

qq_33601179的博客 6584

Python访问控制&继承

自由 自信 不失望 281

vmware vsphere5---部署vCSA(VMware vCenter Server)附带第二阶段安装报错解决方案

因为这份文档我是边做边写的,遇到问题重新装了好几次所以IP会很乱ESXI主机为192.168.20.10VCSA为192.168.20.7,后台为192.168.20.7:5480后期请自行对应,后面的192.168.20.57请对应192.168.20.7,或根据自己的来。

m0_70212665的博客 5714

python中子类不能继承父类的私有属性和方法

#在子类中是不能继承私有属性和方法的, #但是私有属性和方法可以在同一个类中被调用 class Person(object): def __init__(self,name): self.__name = name self._age = 12 def greet(self): print('hello,my name is %s' % self.__name) def...

weixin_43226484的博客 1万+

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 728

手把手教你学PCIE--所有 PF(Physical Function)共同管理和分配 VF

但具体如何分配和使用 VF 取决于硬件设计、驱动程序配置以及实际应用场景。

MHD0815的博客 1462

论Python中访问限制、继承和多态的学习

访问限制 定义 在Class内部,可以有属性和方法,而外部的代码可以通过直接调用实例变量的方法来操作数据。但是这种操作方法有很大的弊端:外部的代码可以自由修改实例中的属性 class Student(object): def __init__(self,name,age): self.name = name self.age = age de...

dsd的博客 328

数仓建模—维度建模之维度表

首先要学会识别维度,维度是相对稳定的、可抽象具有共性的、固有的(天然的)描述度量或事实的上下文属性信息,失去维度信息的度量信息是没有意义的或者说是失去维度信息的事实表是没有意义的。其次要掌握维度表的设计原则和设计流程,从而更加科学的设计维度表,其实这些东西都是术,我们一直都说一句话大道至简,其实如果你掌握了精髓,抛开这些术也可以做到得心应手,这就像张无忌练太极剑一样,忘记了才能达到道的境界,也就是无我,如果做不到就记住这些原则加以应用从而达到术的境界。

2401_84052244的博客 4362

python基础(16):访问限制、继承和多态

python基础

weixin_64197656的博客 558

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Python学习总结(17)面向对象编程---访问限制、继承和多态及"开闭"原则

一、python中的访问限制 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性: >>> bart = Student('Bart Simpson', 59) >>> bart.scor...

塘朗晨光 379

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python学习笔记7---继承及多态,动态添加属性和方法,限制添加访问属性,访问受限的属性

单继承 多继承 from father import Father from monther import Monther class Child(Father,Monther): def __init__(self,name): Father.__init__(self,name) Monther.__init__(self,nam...

paul200345的博客 207

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

初学Python的学习笔记8----面向对象、数据封装、访问限制、继承和多态

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34080571的博客 128

【Python】[面向对象编程] 访问限制,继承和多态

1、在Python中两个下划线__ 就是带便私有属性 private 注意已两个下划线开头并且结尾的 如 __init__ 是特殊变量,不是私有变量2、多态,Python的“file-like object“就是一种鸭子类型。 转载于:https://www.cnblogs.com/oiliu/p/4740497.html...

weixin_30481087的博客 67

Python面向对象编程(类和实例 访问限制 继承和多态 获取对象信息 实例属性和类属性)

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。数据封装、继承和多态是面向对象的三大特点在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

没有酒也没有故事。 917

Python(十一)面向对象(类和实例|访问限制|继承多态|对象信息|实例和类属性)

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。 仍以Student类为例,在Python中,定义类是通过class关键字: class Student(object): pass class后面紧接着是类名,即Stude...

踟蹰千年的博客 227

Python类的概念和使用以及继承等用法—十分详细清楚

在python中,类表示具有相同属性和方法的对象的集合,属性可以看成是一些对象可以是变量也可以是别的,方法就是在类中定义的函数,在使用类的时候,需要先定义类,然后再创建类的实例,通过类的实例就可以访问类中的属性和方法了,可以理解成类是一个集合里面包含有很多变量以及函数,但是又有一些便捷的操作和方法。类的定义使用class关键字来实现。

m0_74055982的博客 3710

【廖雪峰Python学习笔记】面向对象编程OOP

面向对象编程 OOP:Object Oriented Programming 程序的基本单元:对象 [ = 数据 + 操作数据的函数] [属性 + 方法] 三大特点:数据封装、继承和多态 OPP中的计算机程序: 一系列命令的集合 —— 一组函数顺序执行。函数化大为小,降低复杂度 一组对象的集合 —— 对象之前互相传递和处理消息 类和实例 概念 类class:创建实例的抽象的模板 实例in...

weixin_40964820的博客 270

python基础-限制访问、继承、多态

【代码】python基础-限制访问、继承、多态。

weixin_45926566的博客 141

Python中类的继承,封装和多态

1、封装 python中的类可以封装:属性,方法。 属性的封装: 将属性私有化,并且定义共有方法set和get。 当我们对于一个类进行属性封装时,需要定义私有属性: class Student: def __init__(self,name,age): self.__name = name self.__age = age ...

Orangeric 1129

Python面向对象编程

用class关键字定义类,类名一般首字母大写(规范)。类里主要包含成员属性和成员方法,其中__init__方法是特殊的"初始化方法",用来给对象设置初始的成员属性。# 定义一个"手机类"Exception是Python中所有内置异常的基类(除了系统退出相关的异常)。它是异常层次结构中的核心类。# 初始化方法:创建对象时自动执行,专门用来设置初始的成员属性# self 代表"当前这个对象"(类似生活中的"我",用来区分不同对象的属性)

2401_88544407的博客 1085

python--------面向对象【私有属性和私有方法、继承、多态】

文章目录私有属性和私有方法继承单继承方法重写父类的私有属性和私有方法多继承多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度 私有属性和私有方法 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被...

GXR的博客 281
上一篇: python --模块
下一篇: Varnish-缓存服务器和负载均衡
FYRXP
博客等级 码龄7年 6粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值