python面向对象

面向对象

一 概念

(1)类的概念(class):用来描述具有相同属性和方法的集合

(2)属性:就是一个变量名

二 类的定义

class 类名:

属性

行为(方法)

类名:

  1. 大驼峰命名法 首字母大写
  2. 见名知意
  3. 区分大小写

三 类的实例化

对象名 = 类名([参数一…])

类的实例化 称为对象

四 属性和方法名的调用

对象名.属性名

对象名.方法名()

类方法的参数

类里面的方法 都会有一个必须存在的参数 self 这个self的参数 不需要传参的 它是代表 当前实例化后的对象

方法的参数 其实就是形参

在类实例化后的对象 调用类里面的方法的时候 如果有形参(self以外的) 就需要去传 实参(跟函数的调用一样)

五 方法的返回值 return

方法里 如果 没有返回值 打印方法的时候 返回 None

如果有返回值得 方法 需要使用 print() 将其输出

class 类名:
    def 方法名():
        return "值"

面向对象二

一 对象属性 类 属性

  1. 使用类创建的属性 在每个对象里 都会存在 称为类属性

  2. 使用对象 创建的属性 只有当前对象存在该属性 称为对象属性

3.创建对象属性 的 俩种方法

在python中self就相当于this指针 self可以改为任意值 但是要保证是传递当前对象的

#对象创建属性的方法1
对象名.属性名 = 属性值
#对象创建属性的方法2 通过 self来创建对象属性
class Demo2:
    def createVar(self,attr):
        self.attr = attr
demo2 = Demo2()
demo2.createVar('name')
print(demo2.attr) #通过当前 的对象 属性 demo2来创建了att属性

4.当在对象里 去修改 类属性的时候 相当于在当前的对象里 创建了一个对象属性 当调用的时候 会优先调用对象属性 而类属性本身的值 不会发生改变

注意: 以后千万不要将对象属性 和类属性重名 因为对象属性 会屏蔽掉 类属性 当删除对象属性以后 才又能够去使用类属性

5.类的属性 不能够 使用 对象属性去删除

6.类属性的创建

类名.属性名 = 属性值
  1. 类和对象属性的操作

    hasattr(obj,”属性名”) #判断是否有该属性 
    setattr(obj,”属性名”,”属性值”) #设置该属性 
    getattr(obj,”属性名”) #获取属性的值 
    getattr(obj,”属性名”,状态码) #当该属性不存在的时候 会返回 你的状态码

二 slots 限制 class 实例能添加的属性

slots 限制 class 实例能添加的属性

class Demo:
    __slots__ = ('name','sex','age') #用元组定义 允许 绑定 的属性名称

myDemo = Demo()
myDemo.name = "我是name"
myDemo.height = 180 #AttributeError: 'Demo' object has no attribute 'height'
print(myDemo.name)

三 给对象绑定方法

(1)使用 MethodType函数 来进行绑定

class Demo:
    def run(self):
        print("我是当前类里面的方法")

myDemo = Demo()
myDemo.run()
from types import MethodType
def sha(self,x,y):
    print("你一直跑 傻不傻")
    return x+y
myDemo.sha = MethodType(sha,myDemo)  #将sha的方法 绑定到 我的对象里

(2) 给所有实例都绑定方法

class Demo:
    def run(self):
        print("我一直在奔跑")

def sha(self):
    print("你一直跑 傻不傻")
#类名 .属性名 = 函数体
Demo.sha = sha

四 私有属性和私有方法

(1) 私有属性

__private.attrs:俩个下划线作为开头 声明属性为私有 不能在类的外部使用 或直接访问

在类的内部 使用 self.__private.attrs去调用

私有属性的访问:

私有属性 在外部是有方法 能够访问到的  因为Python的解释器 把 __name的属性已经改成了 _类名__属性名

你可以通过 类名_属性名的方式 来访问 私有属性

注意:

建议不要这样去做(了解就好)  因为不同的Python的解释器 会把私有属性名改成不同的变量名

(2)私有方法

_private.func

私有方法访问,声明方法为私有方法 不能在类的外部使用 或直接访问

注意:私有属性 或者方法 饭都不能被继承

五 装饰器 @property

#私有属性
class Woman:
    #不能随便去问女孩子的年龄
    __age = 10
    #可以通过一个公有的方法去获取
    @property #Python自带的一个装饰器   加上property为获取私有属性的方法
    def age(self):
        return self.__age
    @age.setter #方法名.setter的为 私有属性的值的修改  
    def age(self,age):
        if age>100:
            raise ValueError("您老 真够潮的")
        else:
            self.__age = age

w = Woman()
w.age = 30
#注意 你的装饰器的方法名 要和私有属性一样的名 否则 就没有意义了 因为外部在使用的时候 第一感觉就是 在操作 一个叫 age的属性名 做到 类内外都一致  
print(w.age)

六继承

在oop程序设计中 当我们定义一个class的时候 可以从现有的类 进行继承 新的类称为子类 而被继承的类成为基类 也叫做父类 活着超类

(1)单一继承

class类名(父类类名):

子类会拥有父类的全部属性或方法私有的以外

所有的类 都会继承object类

(2)多继承

class 类名(父类1,父类2…..);

pass

注意;

注意你写的基/父类的顺序  若是父类中存在相同的方法名 而在子类使用时 未指定python

七父类方法的调用

(1)父类的类名。属性名/方法名 覆盖的情况下

(2)super().方法名【【推荐使用的一种】

(3)super(类名.self)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值