Python 基础之面向对象初识与类的封装

一: 面向对象类的初识
#(1) 类的定义
#三种方式:
#1.
class MyClass:
    pass

#2.推荐
class MyClass():
    pass

#3.
class MyClass(object):
    pass
#(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__) #只有自定义的

类中的成员属性和方法可以给对象使用
但是只有使用权,没有归属权
类里面的成员属性和方法只对数类所有
对象只能使用(获取) 不能修改或删除
不归对象所有
#(1)实例化的对象丰台添加公有成员方法
##(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()

#by hsz
三:类的相关操作
#例:

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  不存在

原文地址:https://www.cnblogs.com/hszstudypy/p/10925495.html

时间: 2024-08-08 14:43:51

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

python基础之面向对象初识

一 面向对象初识 Python要么是面向过程要么是面向对象. 概念及优缺点: 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了程序的复杂度 缺点是:一套流水线或者流程就是用来解决一个问题,生产汽水的流水线无法生产汽车,即便是能,也得是大改,改一个组件,牵一发而动全身. 应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等. 面向对象的

Day6 - Python基础6 面向对象编程

Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色 1 2 3 4 5 6 7 8 9 10 11

Python基础09 面向对象的进一步拓展

Python基础09 面向对象的进一步拓展 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们熟悉了对象和类的基本概念.我们将进一步拓展,以便能实际运用对象和类. 调用类的其它信息 上一讲中提到,在定义方法时,必须有self这一参数.这个参数表示某个对象.对象拥有类的所有性质,那么我们可以通过self,调用类属性. class Human(object): laugh = 'hahahaha' def show_laugh(

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ? 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以称为基类或超类,新建的类称为派生类或子类. ? 在Python中实现继承非常简单,在声明类的时候,在类名后面添加一个小括号,就可以完成继承关系.单纯的从代码的层面上来看当两个类具有相同的功能或者特征的时候就可以使用继承.提取一个父类,这个父类中编写者两个类相同的部分,然后两个类分别去继承这个类就可以

Python基础08 面向对象的基本概念

Python基础 面向对象的基本概念 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢逆水寒龙,topmad和Liqing纠错 Python使用类(class)和对象(object),进行面向对象(object-oriented programming,简称OOP)的编程. 面向对象的最主要目的是提高程序的重复使用性.我们这么早切入面向对象编程的原因是,Python的整个概念是基于对象的.了解OOP是进一步学习Python

Python基础之面向对象2(封装)

一.封装定义: 二.作用 三.私有成员: 1.基本概念及作用 2.__slots__手段私有成员: 3.@property属性手段私有成员: 四.基础示例代码 1.用方法封装变量 """ 练习:用方法封装变量 """ class Enemy: def __init__(self,name,atk,speed,hp): self.set_name(name) self.set_atk(atk) self.set_atk_speed(speed) s

Python基础之面向对象基本概念

面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果:函数不仅能执行,还能返回结果. 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现: 根据开发需求,将某些功能独立的代码封装成一个又一个函数: 最后完成的代码,就是顺序的调用不同的函数. 特点 注重步骤和过程,不注重职责分工: 如果复杂需求,代码会变得很复杂: 开发复杂项目,没有固定的套路,开发难度很大. 面向对象-谁来做 相比较函数,面向对象是更大的封装,根据职责在一个对象中

python基础_面向对象进阶

@property装饰器 之前我们讨论过Python中属性和方法访问权限的问题,虽然我们不建议将属性设置为私有的,但是如果直接将属性暴露给外界也是有问题的,比如我们没有办法检查赋给属性的值是否有效.我们之前的建议是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作.如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问

学习PYTHON之路, DAY 7 - PYTHON 基础 7 (面向对象基础)

面向对象三大特性 一.封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容. 所以,在使用面向对象的封装特性时,需要: 将内容封装到某处 从某处调用被封装的内容 第一步:将内容封装到某处 self 是一个形式参数,当执行 obj1 = Foo('wupeiqi', 18 ) 时,self 等于 obj1 当执行 obj2 = Foo('alex', 78 ) 时,self 等于 obj2 所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name