Python小白学习进行时---面向对象编程(二)(2018-6
一、类初始
对象属性和_ init _方法:
_ init _方法又叫做构造法。在类创建对象的时候自动调用、初始化对象属性、声明对象属性。
self默认参数:
self是类中对象方法默认参数,调用带有默认参数self的方法,系统会自动将当前方法的对象传给self。
class Person:
"""人"""
def __init__(self, name='', age=0):
# 声明对象属性
self.name = name
self.age = age
def eat(self):
print('吃饭')
# 声明一个对象方法run
def run(self):
print('self',self)
#在对象方法中使用对象的属性,直接用self去获取属性
print('%s跑起来'% (self.name))
self.eat()
#创建一个Person对象
p1 = Person('小明', 10)
二、属性的增删改查
1、查
方式一: 直接通过对象查找属性;对象.属性
方式二:getattr(对象,属性名,默认值)
通过方法getattr()获取对象的指定属性。
注意:1、不设置默认值,属性如果存在,就获取属性的值;如果不存在不,报错。
2、设置默认值的情况下:属性如果存在就获取属性的值,如果不存在,将默认值作为结果输出
class Dog:
"""狗🐶"""
# Dog类有name和age两个属性
def __init__(self, name='', age=0):
self.name = name
self.age = age
dog1 = Dog('才才')
print(getattr(dog1, 'name', None))
print(getattr(dog1, 'score', None))
才才
None
2、修改
方式一:将新值直接付给对应的属性 ;对象.存在的属性 = 新值
dog1.name = '大黄'
方式二:setattr(对象,属性名,新值)
setattr(dog1, 'name', '小黄')
方式三:对象._ setattr_(属性名,新值)
dog1.__setattr__('name', '小黑')
3、增(对象添加属性)
Python中可以动态添加属性
方式一:对象.不存在的属性=值
dog1.sex = 'nan'
方式二:setattr(对象,不存在的属性名,新值)
setattr(dog1,'score','100')
print(dog1.score)
方式三:对象.setattr(不存在属性名,新值)
dog1.__setattr__('score',100)
print(dog1.score)
4、删除属性:
方式一: del 对象.属性
del dog1.age
print(dog1.age) # AttributeError: 'Dog' object has no attribute 'age'
删除以后再打印age属性会出现报错。
方式二:delattr(对象,属性名)
delattr(dog1, 'age')
方式三:对象.delattr(属性名)
dog1.__delattr__('age')
5、判断对象是否拥有某个属性
方式:hasattr(对象,属性名)
判断对象是否拥有指定属性
其返回值为bool值
result = hasattr(dog1, 'name')
print(result)
实例:
1、对象属性的操作只对当前那一个对象有效
class Person:
"""人"""
def __init__(self, name='', age=0, id_num='', sex=''):
self.name = name
self.age = age
self.id_num = id_num
self.sex = sex
p1 = Person('小明', 10)
# 给不存在的属性赋值,就是添加属性
p1.score = 100
print(p1.score+100)
del p1.name
# print(p1.name)
p2 = Person('luo', 30)
print(p2.name)
注意:
1.对对象属性的增、删、改、查是针对指定的那个一个对象。不会影响其他的对象
2.实际开发用的时候,一般只用获取对象属性的值和修改对象属性的值。想要添加和删除属性,一般都是在init方法中去操作
2、
class Dog:
"""狗"""
# 通过给__slots__赋值,可以限制类中对象的属性有哪些,防止一个不必要的属性被添加
__slots__ = ('name', 'age', 'color')
def __init__(self, name='', age=0, color=''):
self.name = name
self.age = age
self.color = color
# self.sex = '男' # AttributeError,因为__slots__中没有'sex'
dog1 = Dog('笑话', 3, 'Yellow')
# dog1.name1 = '大黄'
# dog1.sex = '男'
del dog1.name
# 注意:__slots__中规定的属性,只能少不能多。删除属性是不受影响的
6、内置函数
1.类._ name_ : 获取类的名字(只有类有这个属性)
class_name = Dog.__name__
2.类.doc : 获取类的说明文档
print(Dog.__doc__)
3.dict
类.dict : 获取类中所有的类属性(类字段)和对应的值的键值对 --> 结果是字典
对象.dict : 以键值对的形式获取指定对象的所有的属性和值
print(Dog.__dict__)
dog.sex = '男'
print(dog.__dict__)
- 类.module : 获取类所在的模块的名字
print(Dog.__module__, __name__)
- 类.bases : 获取指定类的基类
print(Dog.__bases__)