Python小白学习进行时---面向对象编程(二)(2018-6

2018-06-27  本文已影响0人  晓枫_0544

一、类初始

对象属性和_ 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__)
  1. 类.module : 获取类所在的模块的名字
print(Dog.__module__, __name__)
  1. 类.bases : 获取指定类的基类
print(Dog.__bases__)
上一篇下一篇

猜你喜欢

热点阅读