请教一下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啊,请问什么呢?
Global site tag (gtag.js) - Google Analytics