python day4

python day4

面向对象

获取对象信息

getattr()、hasattr()、setattr()操作类的属性和方法

getattr(对象, 属性)
获得属性的值,如果没有该属性就AttributeError
getattr(对象, 属性, 返回默认值)
getattr(obj, 'y', 404)
如果y属性不存在,返回404

hasattr(对象, 属性)
True、False

setattr(对象, 属性, 属性值)
给对象设置属性并赋值

用于不知道对象的信息时,去剖析对象。平时不要用。

对象属性 和 类属性

对象的属性除了构造器外,还可以在对象创建以后再去给指定属性。
也就是对象绑定属性

class Student(object):

    def __init__(self, name):
        self.__name = name

xiaoming = Student('xiaoming')
xiaoming.age = 8

类属性

class Student(object):
    name = 'student'

可以通过类调用类属性
Student.name
也可以通过对象:
xiaoming.name
前提是对象没有和类属性同名的属性
如果对象属性和类属性重名,那么用对象调用,由于优先级的问题,会屏蔽类属性,调用对象属性。
删除掉对象属性后,才可以访问类属性。

为了统计学生人数,可以给Student类增加一个类属性,每创建一个实例,该属性自动增加:

# -*- coding: utf-8 -*-

class Student(object):
    count = 0

    def __init__(self, name):
        self.name = name
        Student.count += 1

面向对象高级编程

封装、继承、多态,面向对象三板斧
python还有高级特性:
多重继承、定制类、元类

使用__slots__

动态绑定允许我们在类之外给对象绑定属性和方法

# -*- coding: utf-8 -*-

class Student(object):
    pass

liupangzi = Student()
liupangzi.name = 'liupz'

def set_age(self, age):
    self.age = age

from types import MethodType
liupangzi.set_age = MethodType(set_age, liupangzi)
liupangzi.set_age(25)

给一个对象绑定,另外创建的新对象仍然没有这些属性和方法
可以给类绑定方法,这样,所有对象都会具有这些方法

Student.set_age = set_age

猜你喜欢

转载自blog.csdn.net/cluster1893/article/details/80162025