Pythonpython

Python基础(五)类和对象

2019-09-27  本文已影响0人  鹊南飞_

1. 类和对象

1. 定义类

class 类名:
        执行语句...
        零到多个类变量...
        零到多个方法...
  1. 类名:由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母小写,单词与单词之间不要使用任何分隔符
  2. 类变量属于类本身,用于定义该类本身所包含的状态数据
  3. 实例变量属于该类的对象,用于定义对象所包含的状态数据
  4. 方法则用于定义该类的对象的行为或功能实现
  5. init构造方法,del析构方法
类的定义

2. 对象的产生和使用

对象的产生
对象的使用

3. 实例方法

对于在类体中定义的实例方法,Python会自动绑定方法中的第一个参数(通常建议将该参数命名为self),第一个参数总是指向调用该方法的对象。在构造方法中,self参数(第一个参数)代表该构造方法正在初始化的对象。

class Dog:
    def run(self):
        print('这是run方法')
    def jump(self):
        self.run()
        print('这是jump方法')

2. 方法

方法是类或对象的行为特征的抽象

1. 类也能调用实例方法

# 全局变量的定义
def foo():
     print('全局变量的foo方法')
bar = 200
class Brid:
    # 定义Bird空间的foo函数
    def foo():
        print('Bird空间的foo方法')
    def walk(self):
        print(self,'正在走')
    bar = 200
# 调用
foo()
print(bar)

Brid.foo()
print(Brid.bar)
# Brid.walk() 报错
Brid.walk('abc')

2. 类方法与静态方法

@classmethod 装饰的是类方法,类方法的第一个参数(建议用cls参数)
@staticmethod 装饰的是静态方法


类方法与静态方法

3. @函数装饰器

示例

当程序使用“@函数”(比如函数A)装饰另一个函数(比如函数B),实际上完成以下两步:

  1. 将被装饰的函数(函数B)作为参数传给@符号引用的函数(函数A)
  2. 将函数B替换(装饰)成第1步返回的结果

可以看出被装饰的函数,不再是原来的函数,而是替换成一个新的东西。

示例2

上面定义了一个装饰器函数foo,执行完返回的不是普通值,而是bar函数,这意味着被@foo修饰的函数最终都会被替换成bar函数。上面程序使用@foo装饰my_test,因此程序会执行foo(my_test),并将my_test替换成foo()函数的返回值:bar函数。程序会两次调用my_test()函数,其实是调用bar()函数

4. 类命名空间

3. 成员变量

1. 类变量和实例变量

类变量 实例变量

2. 使用property函数定义属性

propetty(fegt=None,fset=None,fdel=None,doc=None)

4. 隐藏和封装

python并不能真正的支持封装
只要将Python类的成员命名为以双下划线开头的,python就会将他们隐藏起来

5. 类的继承

1. 单继承

class SubClass(superClass1, superClass2, ...):
    # 类定义部分
类的继承

2. 多继承

虽然在语法上明确支持多继承,但通产推荐,如果不是很有必要,尽量不要使用多继承,避免很多麻烦
当一个子类有很多个直接父类时,该子类会继承得到所有父类的方法。如果多个父类有同名的方法,排在前面的父类中的方法会”遮蔽“在后面的父类中的同名方法。

3. 重写父类的方法

重写父类的方法

4. 使用未绑定方法调用被重写的方法

使用未绑定方法调用被重写的方法

5. 使用super函数调用父类的构造方法

排在前面的父类的同名方法会遮蔽后面父类的同名方法


没有使用super函数 使用super函数

6. Pthon的动态性

1. 动态属性与slots

2. 使用type()函数定义类

3. 使用metaclass

7. 多态

8. 枚举类

上一篇 下一篇

猜你喜欢

热点阅读