Лучшие практики при доступе к атрибутам и методам других классов - PullRequest
0 голосов
/ 19 марта 2011

это тип вопроса передового опыта.Я хочу получить доступ к атрибутам и методам одного класса из другого (возможно, это плохая практика сама по себе), и что я делаю, чтобы добиться этого, это

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 ]

3 голосов
/ 19 марта 2011

более точно, если вы хотите получить доступ к 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 = карандаша ()

скрывает символ "объект" питона, скорее всего, не очень хорошая идея.

1 голос
/ 19 марта 2011

Атрибуты, связанные с self в обычном методе, доступны только через экземпляр, который был передан как self при вызове метода. Если метод никогда не вызывается через экземпляр, тогда атрибут не существует.

Атрибуты класса отличаются тем, что они связаны при создании самого класса.

Кроме того, если атрибут начинается с одного подчеркивания (_), то никогда не обращайтесь к нему за пределами класса, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...