use*_*512 2 python oop class python-3.x python-3.4
所以我最近潜入了OOP,到目前为止一切都很顺利.虽然我本身没有任何问题,但我希望存在一个令人惊奇的功能,尽管我找不到有关该功能的任何文档.
在为对象分配属性时,我经常发现我必须改变依赖于其他属性的属性,比如光明和黑暗.这是一个例子:
class shade:
def __init__(self, light):
self.light=light
self.darkness=100-light
def __str__(self):
return (str(self.light) + ',' + str(self.darkness))
>>> shade1=shade(30,70)
>>> shade1.light
30
>>> shade1.darkness
70
Run Code Online (Sandbox Code Playgroud)
现在,虽然这很酷,但我想要的是同一个过程,但如果一个属性发生变化,则在同一个对象中.如果我重置光的属性(哦是的),我希望黑暗相应地加入/减少.我可以用一个函数来做这个,如果它可以改变光的属性,返回光/暗的新值,但是如果我只是通过重新赋值来改变光的属性,我想要一种方法来做到这一点,w/out使用函数,像这样:
>>> shade1.light=50
>>> shade1.light
50
>>> shade1.darkness
50
Run Code Online (Sandbox Code Playgroud)
另外,作为OOP的新手,如果有人知道一些好的教程,那也将是一个巨大的帮助.
提前致谢.
Rya*_*ing 13
定义darkness为属性
class shade:
def __init__(self, light):
self.light=light
@property
def darkness(self):
return 100 - self.light
def __str__(self):
return (str(self.light) + ',' + str(self.darkness))
Run Code Online (Sandbox Code Playgroud)
属性向外显示为属性,但在内部充当函数调用.当你说s.darkness它将调用你为其财产提供的功能时.这允许您仅在内部维护一个变量.
如果您希望能够通过指定黑暗来修改它,请setter为属性添加一个
class shade:
def __init__(self, light):
self.light=light
@property
def darkness(self):
return 100 - self.light
@darkness.setter
def darkness(self, value):
self.light = 100 - value
Run Code Online (Sandbox Code Playgroud)
从而实际上修改了光.如果您以前从未见过属性,我建议print()您在函数体中插入一些s,这样您就可以看到它们何时被调用.
>>> s = shade(70)
>>> s.light
70
>>> s.darkness
30
>>> s.light = 10
>>> s.darkness
90
>>> s.darkness = 20
>>> s.light
80
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |