一.面向对象类的初识

1.类的定义

#三种方式:
#1.
class MyClass:
    pass

#2.推荐
class MyClass():
    pass

#3.
class MyClass(object):
    pass

总结为一句话:class 类名可以不加括号,可以加括号,可以加括号而且括号里面加object。

2.类的实例化

class MyClass():
    pass
#类的实例化,实例化对象
obj = MyClass()        #obj 就是一个对象

3.类的基本结构

只有成员方法和成员属性
对象.属性  对象.方法()
#例:
class MyClass():
    #成员属性
    color = "绿色"
    #成员方法
    def pa(self):
        print("我小时候很喜欢爬树")

obj = MyClass()
print(obj.color)
obj.pa()

'''
语法允许,大师一定不要这么写,class 和 def 不太一样
函数在调用时,才会触发里面的代码块
而类只要执行到这一行,就会触发了
class MyClass():
    if 5 == 5:
        print(5555)
'''

#改造
class MyClass():
    def func(self):
        if 5 == 5:
            print(555)

obj = MyClass()
obj.func()
#类的命名:
在对类进行命名的时候,推荐使用大驼峰命名法
对于类的命名参考变量变量命名方式

二.类的封装性

公有的,在类可以调用类的相关公有属性
私有的(前面开头加上__ 两个下划线),在外类不可以调用类内的相关私有属性方法
绑定方法:
    (1)绑定对象 (默认系统把对象当成参数传递)
    (2)绑定到类 (默认系统把类当成参数传递)
    这两个参数,无论哪种,都是系统自己传递的
    但是参数需要我们自己定义好
#例:
class Car():
    #公有属性
    logo = "特拉斯"
    color = "绿色"
    #私有属性
    __oil = '2.5L'

#公有方法
    def run(self):
        print("我的小车跑的快")

def jiao(self):
        print("我的%s 小车会滴滴的叫" % (self.logo))

def jiao2(self):
        print("我的%s 小车会滴滴的叫,颜色 %s" % (self.logo,self.color))
     #私有方法
    def __oil_info(self):
        print("这就是我的私有方法")

#实例化对象
obj = Car()
print(obj)

#对象的相关操作

1.实例化的对象访问公有成员属性和方法

对象.属性
对象.方法()
#(1)调用公有成员属性
print(obj.logo)
#print(obj.__oil) #私有的无法在类外调用

#(2)调用公有成员方法
系统自己会默认的把obj这个对象当成参数进行传递
传递给run这个方法,self这个参数进行接收
obj.run()
obj.jiao()

#obj.__oil_info() #error 私有的不能够在进行调用

2.实例化的对象动态添加公有成员属性

obj.jiao2()  #输出是绿色
obj.color = "黄色"
print(obj.color)
obj.jiao2()  #现在输出是黄色

#查看obj 这个对象的内部成员,使用__dic__
print(obj.__dict__) #只有自定义的

类中的成员属性和方法可以给对象使用
但是只有使用权,没有归属权
类里面的成员属性和方法只对数类所有
对象只能使用(获取) 不能修改或删除
不归对象所有

3.实例化的对象动态添加公有成员方法

##(1) 添加无参方法
def func():
    print("我的汽车会变成,请叫我大黄蜂")

#把func方法复制给成员方法bianxing
obj.bianxing = func
obj.bianxing()
print(obj.__dict__)

##(2)添加有参方法

def qingtianzhu(name):
    print("请叫我"+name)

obj.qingtianzhu = qingtianzhu
obj.qingtianzhu("擎天柱")
print(obj.__dict__)

#改造一
obj.color = "蓝色"
def qingtianzhu(self,name):
    print("请叫我"+name,"我的颜色是"+self.color)

obj.qingtianzhu = qingtianzhu
obj.qingtianzhu(obj,"擎天柱")

#改造2 把qintianzhu变成绑定 方法(系统帮助我们传递对象)
import types
#MehtodType (函数,对象) 要把那个函数作为对象的绑定方法
obj.qingtianzhu = types.MethodType(qingtianzhu,obj)
obj.qingtianzhu("擎天柱")

##(3)lambda 表达式
obj.fangxiangpan = lambda : print("我是方向盘的制作方法")
obj.fangxiangpan()

三.类的相关操作

#例:

class MyCar():
    oil = "涡轮增压发动机1.5T"
    __price = "100万"

#公有普通方法(只能类来调用)
    def oil_info():
        #类.oil
        print("我的油耗信息:"+MyCar.oil)

#私有普通方法
    def __price_info():
        print("我的价格是保密")

#obj = MyCar()
#obj.oil_info() 对象调用不了

1.定义的类访问公有成员属性和方法

.成员属性
.成员方法()
无论是私有属性还是方法都无法在类外调用

print(MyCar.oil)
MyCar.oil_info()
#MyCar.__price_info() error 无法使用类来调用私有成员

2.定义的类动态添加公有成员属性和方法

#公有属性
MyCar.logo = "中国一汽"
print(MyCar.logo)

#使用__dict__查看类内的成员
print(MyCar.__dict__)

#公有方法
##(1)无参方法
def dahuangfeng():
    print("请叫我大黄蜂")

MyCar.dahuangfeng = dahuangfeng
MyCar.dahuangfeng()

##(2)有参方法
def qingtianzhu(name):
    print("请叫我"+name)

MyCar.qingtianzhu = qingtianzhu
MyCar.qingtianzhu("一柱擎天")

##(3)lambda 表达式
MyCar.dog = lambda : print("我的车还会变成机器狗")
MyCar.dog()

3.如何访问私有成员

#例:

class Plane():
    #公有属性
    captain = "peter"
    #私有属性
    __air_sister = "20个"
    #公有绑定方法
    def fly1(self):
        print("飞机会飞1")
    #公有普通方法
    def fly2():
        print("飞机会飞2")
    #私有的绑定方法
    def __oil_info1(self):
        print("飞机百公里油耗是10升1")
    #私有的普通方法
    def __oil_info2():
        print("飞机百公里油耗是10升2")
    #公有的绑定方法
    def pub_info1(self):
        print(self.__air_sister)
        self.__oil_info1()
        print(self.captain)
    #公有的普通方法
    def pub_info2():
        print(Plane.__air_sister)
        Plane.__oil_info2()

##(1)如何访问类的私有成员?
利用公有方法调用类内的私有成员
私有成员在本类之内可以随便调用,在本类之外不能调用
#实例化对象 方法一
obj = Plane()
obj.pub_info1()
#也可以使用类来调用  方法二
Plane.pub_info2()

##(2)如果就想直接在类外调用私有成员,有方法吗
私有成员的改名策略:
_类名+私有成员 (没有真正的私有化,类外可以通过改名策略仍然调取)

print("========")
print(obj._Plane__air_sister)
Plane._Plane__oil_info2()

##(3)如何删除成员
# (1) 实例化的对象删除公有成员属性和方法
obj = Plane()
print(obj.__dict__)
print(obj.captain)

captain 成员属性归属于class Plane,不是obj
obj 可以有使用权,没有所有权(不能够修改或者删除类内的属性)
如果对象有该属性方法,先优先调用该对象里面的成员
如果都没有.直接报错
#删除对象属性
obj.captain = "JIAN"
print(obj.__dict__)
print(obj.captain)

del obj.captain
print(obj.captain) #obj自己的captain 被删除了
#obj.pub_info1() 里面的peter还在

#删除对象的方法
print("==========")
obj.fly222 = lambda : print("我的飞机能潜水")
obj.fly222()
print(obj.__dict__)
# del obj.fly
# print(obj.__dict__)

##(2)定义的类删除公有成员属性和方法
对象可以调用类中的公有成员和方法
类不能调用对象的相关成员属性和方法
方向不可逆
一个类可以产生多个对象,多个对象彼此之间,相互独立

#删除类的成员属性
# del Plane.captain
# print(Plane.captain)
# print(obj.captain)
# Plane.fly111222() error  类不能调用对象的方法

# 删除类的成员方法
del Plane.pub_info1
# Plane.pub_info1() error  不存在

Python 基础之面向对象初识与类的封装的更多相关文章

  1. python中的面向对象学习以及类的封装(这篇文章初学者一定要好好看)

    这篇文章对于初学者可以很有效的理解面对过程.面对对象 一.首先介绍一下面向过程和面向对象的比较: 面向过程 VS 面向对象 编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何 ...

  2. 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装

    抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...

  3. python基础之面向对象(二)(封装、继承、多态)

    一.封装 (1)封装是面向对象的一大特点 (2)面向对象编程的第一步--将属性和方法封装到一个抽象的类当中 (3)外界使用类创建对象,然后让对象调用方法 (4)对象方法的细节都被封装在类的内部 1.案 ...

  4. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  5. Python 基础 四 面向对象杂谈

    Python 基础  四  面向对象杂谈 一.isinstance(obj,cls) 与issubcalss(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls ...

  6. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  7. 二十. Python基础(20)--面向对象的基础

    二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...

  8. python基础,函数,面向对象,模块练习

    ---恢复内容开始--- python基础,函数,面向对象,模块练习 1,简述python中基本数据类型中表示False的数据有哪些? #  [] {} () None 0 2,位和字节的关系? # ...

  9. Python 基础教程之包和类的用法

    Python 基础教程之包和类的用法 建立一个文件夹filePackage 在filePackage 文件夹内创建 __init__.py 有了 __init__.py ,filePackage才算是 ...

随机推荐

  1. nginx解决WordPress 上传到服务器后页面404错误的方法

    人啊,要说你傻了吧,真是啥事都能碰到: 因为换了nginx,把新做的上传到服务器配置好后,就主页和后台能打开,其他的所有页面,全是404,果真404和502是我最讨厌的数字啊,这让我很怀疑人生啊,怀疑 ...

  2. WLC配置LAG

    在一般的网络环境中,为了让网络更加的可靠,冗余性更好,会对WLC和对端的设备配置LAG. 如下是一个基本的示例topo(VSS的情况下建议的连接方式): 一般情况下的连接方式: 一般来说配置比较简单, ...

  3. js将相除结果百分比 ,四舍五入函数 toFixed()

    function percentNum(num, num2) { return (Math.round(num / num2 * 10000) / 100.00 + "%"); } ...

  4. hadoop中block副本的放置策略

    下面的这种是针对于塔式服务器的副本的放置策略

  5. hamming distance(汉明距离)

    看knn算法时无意间发现这个算法,但是维基上有错误的示例和python代码...因为汉明距离并不是求相同长度字符串(或相同长度的整数)之间的字符(或数位)差异个数. 正确的详见:https://en. ...

  6. CSS水平垂直居中常见方法总结

    1.元素水平居中 当然最好使的是: margin: 0 auto; 居中不好使的原因: 1.元素没有设置宽度,没有宽度怎么居中嘛! 2.设置了宽度依然不好使,你设置的是行内元素吧,行内元素和块元素的区 ...

  7. Java面向对象编程 -1.4

    对象内存分析 对象实例化操作初步分析 Java之中类属于引用数据类型,引用数据类型最大的困难之处在于要进行内存的管理,同时在进行操作的时候也会有内存关系的变化. 所以本次针对于之前的程序的内存关系进行 ...

  8. 涂涂影院APP-免费VIP电影观看「安卓APP」

    最新下载链接:https://www.lanzous.com/u/niceyoo 2019年基本就没推广过这款APP,很失败,从第一版发布到现在涂涂影院已经做了2年了, 由于没有官网,所以基本百度能搜 ...

  9. arcPy实现要素图层数据的复制(选择特定字段填写属性)

    >>> import arcpy>>> fc=r"D:\楚雄州数据\testdata.gdb">>> editor=arcpy ...

  10. centos7搭建hadoop2.10完全分布式

    本篇介绍在centos7中大家hadoop2.10完全分布式,首先准备4台机器:1台nn(namenode);3台dn(datanode) IP hostname 进程 192.168.30.141 ...