Python类的详解

类:用来描述具有相同属性和方法的对象的集合

一 类的命名方式

  1. 大驼峰 首字母大写
  2. 见名之意
  3. 区分大小写
实例
class Women:
    sex = '女'
    faceValue = "高"
    height = "168"
    weight = "85斤"
    color = "yellow"
    def makeChild(self):
        print("可以生宝宝")
    def cookie(self):
        print("做饭")
    def memeda(self):
        print("白天么么哒")
#打印Women 类
print(Women) #<class '__main__.Women'> 

二 对象

类的实例化为对象

object = 类名([参数…])

实例
lisi = Women() #将Women类实例化 成对象
print(lisi)  #<__main__.Women object at 0x000001B6873C8CC0>

三 属性和方法的使用

调用属性

object.属性名

调用方法

object.方法名()

注意: 类里面的变量 称之为属性 类里面的函数 称之为方法

四 self的说明

方法里面的self代表的是当前类的实例化后的对象

self不是只能叫self 别的也可以 但是规范来说 都使用self

实例
class A:
    name = ''
    def demo(self):
        print(self) #代表当前实例化类的对象
        print(id(self))

a = A()
a.demo()
print(a)
print(id(a))

五 return 方法的返回值

和函数一样 代码遇到return 下面就不在执行 会将值返回给调用处

没有return的方法 打印调用处的值为 None

实例
class Demo:
    name = ''
    def speak(self):
        print("我是{}号楼".format(self.name))

    def myRetuen(self):
        return self.name
        print(self.name) #不在执行
d2 = Demo()
d2.name = 'd2' #给当前对象 添加对象属性
# print(d2.name)
# print(d2.speak()) #None
d2Name = d2.myRetuen()
print(d2Name) #d2

六 对象属性和类属性

  1. 使用对象创建的属性 称之为对象属性 只有当前对象里才存在
  2. 如果使用对象属性创建了一个和类里面同名的属性 那么调用的时候 会优先查找对象里面的属性
  3. 使用类里面的方法的参数 self 创建的属性 也为对象属性
  4. 当使用对象.属性名来改类里面的属性的时候 其实是在对象里面创建了一个同名的属性
  5. 当将对象里面同名的属性删除掉以后 还是会调用类的属性
  6. 不能再对象里 删除 类里面的属性 只有使用的权利
  7. 使用类操作过的属性 所有对象在调用类属性的时候 都是修改后的属性
创建对象属性的方法
class A:
    #通过方法创建对象属性
    def createVar(self):
        self.xx = 'oo'
a = A()
#对象名.属性名
a.name = 'xx'
创建类属性的方法
类名.属性名

七 给对象和类绑定方法

(1)给对象绑定方法

from types import MethodType

实例
def func(self):
    print('func')
from types import MethodType
a = A()
#a.func = MethodType(方法名,对象名)
a.func = MethodType(func,a)
(2) 给类绑定方法
实例
def func(self):
    print('func')
#类名.属性名 = 函数名
A.func = func
注意:
  1. 给对象绑定属性或者方法 只有当前对象有
  2. 给类绑定属性或者方法 所有当前类的实例化的对象 都会拥有

八 __slots__ 限制对象 动态添加属性

只能创建__slots__允许的属性 否则会报 AttributeError: ‘A’ object has no attribute ‘xxx’

实例:
class A:
    __slots__ = ('属性1''属性2'...)

九 私有属性 和 私有方法

(1) 类的私有属性:以__ 作为开头 不能再类的外部进行使用和访问 在类的里面使用 self.__属性名

私有属性的访问

在类的外部: 对象._类名__属性名 查找

在类的内部: 方法里面的变量 self.__属性名 调用

注意: 在类的内部只要使用self.__属性名 那么就会去找私有属性\_类名\__\_属性名

(2) 类的私有方法

​ 以__ 作为开头 不能再类的外部进行使用和访问 在类的里面使用 self.__方法名

在公有方法里面 通过self去调用

十 继承

概念: 面向对象编程带来最大的好处就代码的重用 实现代码重用的操作就是累的继承

被继承的类称之为 父类、基类 或超类

继承的类称之为子类

所有的类都会继承一个超类 object

(1) 单一继承

class 类名(继承的父类):

​ pass

实例
class A:
    #不管是本类还是子类 只要实例化 就会调用(前提是 没有被子类的__init__覆盖)
    def __init__(self,n,a,s):
        self.name = n
        self.age = a
        self.sex = s
    def speak(self):
        print("我现在{}岁了 我叫{} 我的性别是{}".format(self.age,self.name,self.sex))
# a = A('张三',18,'男')
# print(a.name)
# a.speak()
class B(A):
    grade = ''
    def __init__(self,name,age,sex,grade):
        print('我是子类的__init__')
        self.grade = grade
        A.__init__(self,name,age,sex)
    def speak(self):
        A.speak(self)
        print("我今年{} 我叫{} 我的成绩是{}".format(self.age,self.name,self.grade))
b = B('张三',18,'男',60)
# print(b.name)
# print(b.__dict__)
b.speak()
注意
  1. 类的单一继承 子类会继承父类私有以外的全部属性和方法
  2. 如果在子类里存在和父类同名的属性或者方法 叫做方法或属性的重写(也就是会覆盖掉)再次调用的时候 调用的是 子类的方法和属性
  3. 在子类里调用父类的方法 类名.方法名(self[,参数…]) self代表当前类的实例化的对象
  4. super(当前类名,self).方法名(如果是单一继承 super方法 不建议加参数)
  5. super().方法名(建议)

(2) 多继承

class 类名(继承的父类1,继承的父类2[,父类3..]):

​ pass

注意:

  1. 当类进行多继承的时候 注意父类的顺序 当父类存在同名的属性或者方法的时候 会从继承的父类从左->右依次查找
调用父类的方法
class A:
    def speak(self):
        print('我是A类的speak方法')
    def a(self):
        print('a')

class B:
    def speak(self):
        print('我是B类的speak方法')
    def b(self):
        print('b')

class C(A,B):
    def speak(self):
        super().speak() #还是从左往右找..
        #super(C,self).speak()
        # super(A,self).speak()
        # super(B,self).speak()

十一 常用的属性

  1. __doc__ 类的说明
  2. __name__返回类名
  3. __base__ 返回一个父类
  4. __bases__ 返回多个父类
  5. __dict__ 返回对象或者类的信息

十二 静态方法

@staticmethod

可以在类的实例化成对象来调用 可以使用类名来调用

实例
class A:
    @staticmethod
    def demo():
        print('类来调用')
a = A()
a.demo()
A.demo()

十三 魔术方法

  1. __init__ 构造方法 作为类的初始化
  2. __del__ 析构方法 在当前文件执行完毕之前去执行 或者是使用 del 对象名 去触发
  3. __str__ 用于转换成 人类能够阅读的形式
  4. __repr__ 转换成解释器查看的形式
  5. __add__ 运算符重载
  6. __getattr__ 调用不存在的属性的时候触发
  7. __len__
  8. __getitem__
  9. __setitem__
  • 74
    点赞
  • 364
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值