python day4
程序员文章站
2022-07-14 17:41:03
...
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
上一篇: python day4
下一篇: Android自定控件之动画总结(一)