Надеюсь, это достаточно ясно:
class myParent():
def __init__( self ):
self.parentNumber = 5
class Child( myParent ):
def __init__( self ):
self.childNumber = 4
def multiplyNumbers( self ):
print myParent.parentNumber * self.childNumber
p = Child()
p.multiplyNumbers()
Я хочу установить parentNumber индивидуально, а затем достичь этого числа через дочерний класс, и в этом случае использовать его для некоторого умножения.
Я новичок в области ООП, поэтому приветствуются любые общие указания по наследованию!
Подробнее:
Я разрабатываю решение для управления проектами для проектов на основе vfx и играю с классами и наследованием, чтобы понять, как они могут помочь мне больше всего.
Прямо сейчас у меня есть высший класс Project и производный класс Shot. Выстрел имеет переменную self.length с длиной конкретного выстрела. Он также получил метод getLengthInSeconds (), который использует self.length вместе с Project.fps для определения длины в секундах. Project имеет метод setFps (), в котором fps устанавливается после создания экземпляра класса.
Я вроде как привык к переменным с префиксом self. и не много экспериментировал с классами, использующими более «глобальные» переменные без self. , Если я сделаю все глобально, а не себя, я могу без проблем использовать Project.fps, но в моем шейном волосе появляется предупреждение о «плохой практике программирования». Возможно, есть лучший, более аккуратный способ?
Edit:
После некоторого чтения super () кажется довольно опасным, и я думаю, что это немного больше, чем мне нужно. У меня в основном классы с одним наследованием, и я даже не уверен, как использовать иерархии алмазов. Есть ли более безопасный способ доступа к переменным и методам суперкласса, который не включает super ()?
Edit:
Хорошо, посмотрите, имеет ли это смысл или я все об этом думаю неправильно.
Я смотрю на классы и наследование как группы и детей. Ребенок знает, что это родитель и все его ценности. Ребенок другому родителю знает, что родители ценят. То, что я пытаюсь сделать, это сделать все снимки частью проекта. И сейчас я создаю экземпляры Shot () из класса Project (), добавляя экземпляры в список снимков, который затем поддерживается в экземпляре Project ().
т.е.
class myParent( object ):
def __init__( self ):
self.parent_id = ''
self.children = []
def createChild( self, name ):
self.children.append( myChild( name ) )
def getChildren( self ):
return self.children
def setParentId( self, id ):
self.parentId = id
class myChild( myParent ):
def __init__( self, id ):
super(myChild, self).__init__()
self.id = id
def getParentId( self ):
return self.parent_id
p = myParent()
p.setParentId( 'parent01' )
p.createChild( 'child01' )
print p.getChildren()[0].getParentId()
Я могу видеть здесь некоторые неправильные шаги в логике, но в действительности не могу обойти это ..
Похоже, что каждый ребенок получает новый экземпляр родителя таким образом, где parent_id всегда является пустой строкой.