浅谈零基础教程总结30天--day13

一、默认参数self

类中的对象方法都有一个默认参数self:
1. 调用带有默认参数self的方法,不需要给self传参。系统会自动将调用当前方法的对象传给self
2. 在方法中使用self就相当于使用调用方法的对象(只能使用self,不能重新给self赋值)

创建对象p1通过对象p1去调用run方法,系统会将self=p1

这个时候在run方法中,p1和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()

二、属性的增删改查

1."""
方式1: 对象.属性
特点:如果属性存在就获取属性的值。如果属性不存在就会报AttributeError错误

方式2:getattr(对象, 属性名, 默认值) 
--> 获取指定对象的指定属性
如果不设置默认值: 属性如果存在就获取属性的值;不存在就报错
如果设置默认值:属性如果存在就获取属性的值;属性不存在的时候,不报错,并将默认值作为结果

方式3:对象.__getattribute__(属性名)
获取指定对象的指定属性。如果属性不存在就会报错
"""
print(dog1.name)
# print(dog1.score)  # AttributeError: 'Dog' object has no attribute 'score'

print(getattr(dog1, 'name', None))
print(getattr(dog1, 'score', None))

print(dog1.__getattribute__('name'))
# print(dog1.__getattribute__('sex'))  # AttributeError

# 2. 改(修改)
"""
方式1: 对象.存在的属性 = 新值
方式2:setattr(对象, 属性名, 新值)
方式3:对象.__setattr__(属性名, 新值)
"""
dog1.name = '大黄'
print(dog1.name)

setattr(dog1, 'name', '小黄')
print(dog1.name)

dog1.__setattr__('name', '小黑')
print(dog1.name)

# 3.增(对象添加属性)
# python中可以动态的给对象添加属性
"""
方式1:对象.不存在的属性 = 值
方式2:setattr(对象, 不存在的属性名, 新值)
方式3:对象.__setattr__(不存在的属性名, 新值)
"""
dog1.sex = '男'
print(dog1.sex)

setattr(dog1, 'score', 100)
print(dog1.score)

# 4.删除属性
"""
方式1:del 对象.属性 
方式2:delattr(对象, 属性名)
方式3:对象.__delattr__(属性名)
"""
# 将dog1的age属性删除
print(dog1.age)

# del dog1.age
# print(dog1.age)  # AttributeError: 'Dog' object has no attribute 'age'

# delattr(dog1, 'age')
# print(dog1.age)  # AttributeError: 'Dog' object has no attribute 'age'

dog1.__delattr__('age')
# print(dog1.age)


# 5. 判断对象是否拥有某个属性
"""
方式:hasattr(对象, 属性名)  ---> 判断指定的对象是否拥有指定的属性
"""
result = hasattr(dog1, 'name')
print(result)
class Dog:
    """
    狗:狗有name、age、color等属性
    """
    def __init__(self,name='',age=0, color=''):
        self.name = name
        self.age = age
        self.color = color

    def run(self):
        print('%s跑起来'% (self.name))

    def shout(self):
        print('%s在叫唤'% (self.name))


dog = Dog()
# 内置的类属性是属于类的,需要通过类去使用

# 1.类.__name__ : 获取类的名字(只有类有这个属性)
class_name = Dog.__name__  # 'Dog'
print(class_name, type(class_name))


# 2.类.__doc__ : 获取类的说明文档
print(Dog.__doc__)

# 3.__dict__
# 类.__dict__ : 获取类中所有的类属性(类字段)和对应的值的键值对 --> 结果是字典
# 对象.__dict__ : 以键值对的形式获取指定对象的所有的属性和值
print(Dog.__dict__)

dog.sex = '男'
print(dog.__dict__)

# 4. 类.__module__ : 获取类所在的模块的名字
print(Dog.__module__, __name__)

# 5. 类.__bases__ : 获取指定类的基类
print(Dog.__bases__)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值