请教一下Python技巧
cow13000
2009-11-30
本人JAVA出身,初涉Python,既然都是面向对象,应该许多相似的地方吧。
现在偶想构造一个对象,是否应该像java一样 class Obj def __init__(self): self.id def setId(self,id): self.id = id def getId(self): return self.id 或者直接构造时传参 class Obj def __init__(self,id): self.id = id 下面这种情况,怎么样再取到ID? |
|
bohemia
2009-11-30
面向对象.不一定是做法也要和Java的构造对象方法类似。
只是理念和理解是对象。 比如你的代码。 class Obj: def __init__(self,id): self.id = id 说明一个类是Obj。初始化的时候,id属性被初始化。 以后就可以直接引用对象的id属性了。 如: class Obj: def __init__(self,id): self.id = id a = Obj('111') #直接引用即可。 print a.id |
|
cow13000
2009-11-30
谢谢LS指教,因为少了访问修饰符,所以总感觉访问不到似的,我错误理解了__init__中的self.id相当于private得了
|
|
yingwuhahahaha
2009-12-01
python中基本没有private的东西,全都可以访问到的
|
|
bohemia
2009-12-01
yingwuhahahaha 写道 python中基本没有private的东西,全都可以访问到的
这也是python中经常提到的一条“如果你想访问私有数据,总会有办法做到”。 所以Python不强制要求private。 |
|
cow13000
2009-12-01
bohemia 写道 yingwuhahahaha 写道 python中基本没有private的东西,全都可以访问到的
这也是python中经常提到的一条“如果你想访问私有数据,总会有办法做到”。 所以Python不强制要求private。 没有对数据封装,谁都可以访问修改,这么做好么 |
|
bohemia
2009-12-01
一样可以封装啊。通过方法操作返回数据,这也是很好的方式。
但如果你一定要直接访问,也是可以的; |
|
Blithe
2009-12-01
bohemia 写道 yingwuhahahaha 写道 python中基本没有private的东西,全都可以访问到的
这也是python中经常提到的一条“如果你想访问私有数据,总会有办法做到”。 所以Python不强制要求private。 private 有个标志的 |
|
bohemia
2009-12-02
添加2个下划线。也是private的一种方式。 谢谢提醒。:)
|
|
cow13000
2009-12-02
私有属性不可以通过 A.__a 访问
去可以通过 A._A__a 访问,蛮有趣的 import blade.Blade import bb.BB import unittest class TestContainer(unittest.TestCase): blade1 = Blade("blade1") blade2 = Blade("blade2",("1","2")) def testAdd(self): bb= BB("b1",(blade1)) bb.addMo(blade2) print bb.bladeList self.assertEqual((blade1,blade2),bb.bladeList) if __name__ == "__main__": unittest.main() 上面的单元测试类报错ERROR: Module :test_container could not be imported (maybe the dir does not have __init__.py folders for all the packages?) test_container是本module的名字,可是这个包下面有__init__.py啊,请问什么呢? |