Learn_Day15 面向对象 ==>> 进阶

  1. 通过类访问:静态字段,静态方法,类方法
  2. 通过类的对象访问:普通字段,类的方法
  3. 字段:静态字段(每个对象都有相同的数据),普通字段(每个字段都有不同的数据)
  4. 方法:静态方法(无需使用对象封装的内容,相当于函数),普通方法(使用对象中的数据),类方法
  5. 属性(特性):普通特性
  6. 快速判断:有self用对象执行,无self用类执行

# 在子类中执行父类的init方法,查看类的成员<qz_day15_1>

class A:
    def __init__(self):
        print(‘A的构造方法‘)
        self.a = ‘动物‘

class B(A):
    def __init__(self):
        print(‘B的构造方法‘)
        self.b = ‘猫‘
        # 执行父类的init方法
        super(B, self).__init__()
        A.__init__(self)

# 创建类的对象
c = B()
# 类的对象.__dict__  查看类的成员
print(c.__dict__)

# 以下在qz_day15_2中导入
class C:
    def __init__(self, name):
        print(‘C的构造方法‘)
        self.n = name

a = C(‘alex‘)
b = a.n
print(b)


# 利用反射可以导入模块,去模块中找类,根据类创建对象,去对象中寻找对应的值<qz_day15_2>

m = __import__(‘qz_day15_1‘, fromlist=True)  # 执行qz_day15_1文件

a = getattr(m, ‘C‘)

b = a(‘alex‘)  # 执行qz_day15_1文件中的类C

c = getattr(b, ‘n‘)

print(c)

# 成员

class P:
    c = ‘A‘  # 静态字段

    def __init__(self, name):
        temp = ‘xxx‘
        self.n = name  # 普通字段

    def show(self):  # 类的方法(普通方法)
        print(self.n)

    @staticmethod  # 内置函数:用来装饰类中的方法,使其方法变成静态方法
    def xxx(arg1, arg2):  # 静态方法,静态方法可以无参数
        print(‘xxx‘)

    @classmethod  # 内置函数:用来装饰类中的方法,使其方法变成类方法
    def ooo(cls):  # cla为必填参数,执行时会自动将类名传入
        print(‘ooo‘)

    def star(self):  # 类的方法(普通方法)
        temp = ‘%s sb‘ % self.n
        return temp

    @property  # 内置函数:用来装饰类中的方法,使其方法伪造成字段
    def end(self):
        temp = ‘%s sb‘ % self.n
        return temp

    @end.setter  # 用于接收属性(也称特性)
    def end(self, value):
        print(value)
        self.n = value

print(P.c)  # 执行静态字段:类名.静态字段   # 自己访问自己的成员,除了类中的方法

# @staticmethod
P.xxx(1, 2)  # 执行静态方法:类名.方法
# @classmethod
P.ooo()  # 执行类方法:类名.方法

obj = P(‘alex‘)
print(obj.star())  # 执行类的方法(普通方法)

# @property
print(obj.end)  # 执行伪造成字段的方法

# @end.setter
obj.end = ‘123‘  # 设置属性(也称特性)
print(obj.end)

# 成员修饰符:用双下划线开头表示私有,仅供内部使用不能被继承

class A:
    x = ‘x‘  # 普通字段
    __o = ‘__o‘  # 私有字段

    def __init__(self):
        self.__x = ‘__x‘
    def s(self):
        print(self.__o)

class B(A):
    def c(self):
        print(self.__x)
    pass

    # a = B()

print(B.x)
# print(_A__o)  # # 报错,私有字段不能外部访问
# print(B.__o)  # 报错,私有字段不能被继承
A().s()
# print(B().__x)  # 报错,私有字段不能被继承
# B().c()  # 报错,私有字段不能被继承


# 特殊方法

class F:
    def __init__(self):
        print(‘init‘)
        self.n = ‘n‘
        xx = ‘xx‘

    def __call__(self, *args, **kwargs):  # *args, **kwargs 万能参数
        print(‘call‘)
        return args, kwargs

    def __getitem__(self, item):  # 获取 在2.7版本中是getlice
        print(item)

    def __setitem__(self, key, value):  # 赋值
        print(key, value)

    def __iter__(self):  # 执行for循环是自动执行
        yield 1
        yield 2
        yield 3

    def __delitem__(self, key):  # 删除
        print(key)

r = F()()  # 自动执行 init 与call
print(r)  # 拿到call的返回值args, kwargs
r = F()
r[‘k1‘]  # 自动执行getitem(在2.7版本中是getlice)并将k1传给item
r[‘k1‘] = [11, 123]  # 自动执行setitem并给key, value赋值,
print(1, F().__dict__)  # F()为类的对象,F().__dict__获取对象的所有成员
print(2, F.__dict__)  # 获取类的所有成员(字段)
for i in r:  # 自动执行iter
    print(‘iter‘, i)
del r[‘k1‘]  # 自动执行delitem并删除key


# 异常(错误)处理

常用错误名称 常用错误解释
AttributeError 试图访问一个对象没有的属性。例:foo.x,但是foo没有x属性
IOError 输入输出异常,基本上上无法打开文件
ImprotError 无法导入模块或包,基本上是路径名称的错误
IndentationError 语法错误(的子类),代码没有正确对其
IndexError 无索引
KeyError key不存在
KeyboarInterrupt Ctrl+C被按下

NameError 使用一个未被赋予对象的变量
SyntaxError.Python 代码非法,不能被Python编译
TypeError 传入的对象类型与要求不符
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量导致你以为正在访问他(重名)
ValueError 传入一个调用者不期望的值,即使值得类型是正确的
Exception 所有错误的基类,任何错误都可以用它来表示

"""
异常(错误)语法1
try:
    pass
except 异常类的名称 as 对象名:  # 对象名是为异常类创建的对象
    pass
"""

异常(错误)语法1

"""
异常(错误)语法2
try:
    pass
except Exception as e:  # 异常可以写多个,按顺序执行
    # 异常时进行的操作
    pass
else:
    # 无异常时进行的操作
    pass
finally:
    无论是否异常最后都要进行的操作
    pass
"""

异常(错误)语法2

a = input(‘请输入:‘)
try:
    if a == ‘a‘:
        print(‘123‘)
    else:
        raise Exception(‘出错了‘)  # 主动触发错误
except Exception as e:  # 封装错误信息的对象
    print(e)



#断言:不成立则把报错<多用于测试>assert 1 == 2
时间: 2024-12-30 16:48:18

Learn_Day15 面向对象 ==>> 进阶的相关文章

Python之路【第八篇】:Python基础(24)——面向对象进阶

参考连接: Python 面向对象(初级篇) http://www.cnblogs.com/wupeiqi/p/4493506.html python 面向对象(进阶篇) http://www.cnblogs.com/wupeiqi/p/4493506.html python 面向对象及相关 http://www.cnblogs.com/wupeiqi/articles/5017742.html 面向对象进阶: 类成员之字段.方法.属性: 类成员修饰符: 类成员之特殊成员 1.类方法 普通的方法

2Python全栈之路系列之面向对象进阶及类成员

Python全栈之路系列之面向对象进阶及类成员 再次了解多继承 先来一段代码 #!/usr/bin/env python # _*_ coding:utf-8 _*_ class A:     def bar(self):         print("BAR")         self.f1()          class B(A):     def f1(self):         print("B")          class C:     def 

Python【day7】:Python学习(面向对象进阶、反射、socket介绍)

面向对象进阶 1.类变量和实例变量 # 一.变量 # 变量包括:实例变量和类变量, # 他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, # 实例变量属于对象 # 类变量属于类 class Province(object): country = "中国" #类变量 def __init__(self, name): self.name = name # 实例变量 # 直接访问实例变量(实例名来调用) obj = Province('河北省') print(obj.na

Python面向对象进阶和socket网络编程-day08

写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self,name): self.name=name p = Chinese('standby') # 实例化一个对象 print(p) # 打印这个对象 --- <__main__.Chinese object at 0x0000000000B3A978> - 示例2: >&g

python面向对象进阶版

面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个'函数'供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板创建的实例(即:对象),实例用于被包装在类中的函数: 4.面向对象三大特性:封装.继承和多态. 面向对象进阶篇详细介绍python类的成员.成员修饰符和类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存

10、python全栈之路-面向对象进阶

十.面向对象进阶 http://www.cnblogs.com/Eva-J/articles/7351812.html 1.isinstance和issubclass 1.1 isinstance(obj,cls) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1.2 issubclass(sub, super) issubclass(sub, super)检查sub类是否是 super 类的派生类 2.反射 #把一个字符串数据类型的变量变成一个真实存在在这个程序

python(24)- 面向对象进阶

面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个‘函数’供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板创建的实例(即:对象),实例用于被包装在类中的函数: 4.面向对象三大特性:封装.继承和多态. 面向对象进阶篇详细介绍python类的成员.成员修饰符和类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存

Python之面向对象进阶

Python之面向对象进阶 进阶有:Python 类的成员.成员修饰符.类的特殊成员. 一.类的成员 类的成员可以分为三大类:字段.方法和属性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份. 1.字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 1 class Province:

Python基础-面向对象进阶

面向对象进阶 一 类中的装饰器方法  classmethod staticmethod property 1.1 property 一般情况下,方法都是动词.指某一类事物的动作 在计算圆形的周长和面积的时候,他们应该是圆形的属性,但是这里确是一个方法.这不符合python面向对象(能够完全区分属性和方法)的理念. 所以我们可以用一个装饰器去将一个属性性质的函数,装饰成一个属性.可以以调用属性的方式去调用他. from math import pi class Circle: def __init