Python圈Python基础

Python基础 Zero to Hero面向对象编程(二)

2019-12-11  本文已影响0人  伊洛的小屋

本文首发自伊洛的个人博客:https://yiluotalk.com,欢迎关注并查看更多内容!!!

1.私有属性和方法
2.类属性,类方法

类属性类方法是可以直接使用类访问,不需要实例化

>>> class Hero(object):
...     skill = 'fire'
...     def __init__(self, name):
...         self._name = name
...
>>> Hero.skill
'fire'
>>> xiangyu= Hero('项羽')
>>> xiangyu.skill
'fire'

1.创建一个英雄类
2.英雄的技能是火焰
3.初始化英雄的名字
4.实例一个英雄
5.调用英雄的技能属性

>>> class Hero(object):
...     skill = 'fire'
...     def __init__(self, name):
...         self._name = name
...     @classmethod
...     def get_skill(cls):
...         return cls.skill
...
>>> Hero.get_skill()
'fire'
>>> liubei = Hero('刘备')
>>> liubei._name
'刘备'
>>> liubei.get_skill()
'fire'

1.不需要实例化就可以调用

#!/usr/bin/python3

class Hero(object):
     skill = 'fire'
     def __init__(self, name):
         self._name = name
     @staticmethod
     def release_skills():
         print(guanyu._name + ' ' +'释放技能' + ': '+ Hero.skill)

guanyu = Hero('关羽')
Hero.release_skills()

1.静态方法 ,英雄释放技能
2.不需要实例化直接释放火焰技能

(yiluo) ➜  Code python test.py
关羽 释放技能: fire
3.property 装饰器

@property 装饰器可以将一个方法变成一个属性来使用,通过 @property 装饰器可以获得和修改对象的某一个属性

@property 表示只读
@property 和 @.setter 表示可读可写
@property、@
.setter、和 @.deleter 表示可读可写可删除
@property 必须定义在 @
.setter 的前面
类必须继承 object 父类,否则 @property 不会生效

#!/usr/bin/python3

class Hero(object):
     skill = 'fire'
     def __init__(self, name):
         self._name = name
     @property
     def name(self):
         return self._name
     @name.setter
     def name(self, value):
         if isinstance(value, str):
             self._name = value
         else:
             raise ValueError
     @name.deleter
     def name(self):
         print('del name')
         del self._name


liubei = Hero('刘备')
print(liubei.name)
liubei.name = '关羽'
print(liubei.name)
liubei.name = 100
(yiluo) ➜  Code python test.py
刘备
关羽
Traceback (most recent call last):
  File "test.py", line 26, in <module>
    liubei.name = 100
  File "test.py", line 15, in name
    raise ValueError
ValueError

1.这样的好处是可以在方法中对用户传入的数据进行校验(校验了英雄名称是字符串)

liubei = Hero('刘备')
print(liubei.name)
liubei.name = '关羽'
print(liubei.name)
del liubei.name
print(liubei.name)
(yiluo) ➜  Code python test.py
刘备
关羽
删除名字
Traceback (most recent call last):
  File "test.py", line 27, in <module>
    print(liubei.name)
  File "test.py", line 9, in name
    return self._name
AttributeError: 'Hero' object has no attribute '_name'

1.英雄已经被成功删除

......待续

享受每一天,Just Enjoy !

关注公众号获取更多内容
上一篇 下一篇

猜你喜欢

热点阅读