访问其他类的属性和方法时的最佳实践

时间:2011-03-19 06:49:04

标签: python inheritance

这是最佳实践类型的问题。我想从另一个类访问一个类的属性和方法(也许这本身就是一个不好的做法),我正在做的是实现这个目标

class table():
    def __init__(self):
        self.color = 'green'
    colora = 'red' 

    def showColor(self):
        print('The variable inside __init__ is called color with a value of '+self.color)
        print('The variable outside all methos called colora has a value of '+colora)

class pencil(table):
    def __init__(self):
        print('i can access the variable colora from the class wtf its value is '+table.colora)
        print('But i cant access the variable self.color inside __init__ using table.color ')

object = pencil()
>>>
i can access the variable colora from the class wtf its value is red
But i can't access the variable self.color inside __init__ using table.color 
>>>

正如你所看到的那样,我正在创建类铅笔的实例,并且正如我在类中定义的那样,我使用符号从一个类继承到另一个类。

我已经读过各地人们在 init 中声明他们的类属性这是否意味着我不应该在不使用它的实例的情况下访问其他类? 我认为这是一个遗传问题,但我无法理解这个概念,我已经在书籍和教程中阅读了一些解释。

最后,我只希望能够使用另一个类访问一个类的属性和方法。 感谢

2 个答案:

答案 0 :(得分:3)

更多的是,如果你想从铅笔访问table.color,你不需要将它包装在一个方法中,但你需要先调用表构造函数:

class table():

    colora = 'red'
    def __init__(self):
        self.color = 'green'
        print 'table: table.color', self.color
        print 'table: table.color', table.colora

class pencil(table):

    def __init__(self):
        table.__init__(self)
        print 'pencil: table.colora', table.colora
        print 'pencil: pencil.color',  self.color
        print 'pencil: pencil.colora', pencil.colora

obj = pencil()

另一个不相关的问题,这一行

object = pencil()

隐藏了python“object”符号,很可能不是一个好主意。

答案 1 :(得分:1)

在普通方法中绑定到self的属性只能通过调用方法时作为self传递的实例访问。如果从未通过实例调用该方法,则该属性不存在。

类属性的不同之处在于它们在创建类本身时受到约束。

此外,如果属性以单个下划线(_)开头,那么如果可以帮助它,则永远不要在类外部访问它。