2016-04-11 2 views
-7

Как с помощью одного собственного instence в несколько подклассов имеют некоторый код, как это:один самостоятельно для класса в классе

class User(object): 

    def __init__(self) 
     self.user_session = Session() 

    def wallet_sum(self): 
     self.user_session.get('current wallet sum') 

    class Action(object): 

     def __init__(self): 
      self.user_session = User.user_session 

     def buy_dog(self): 
      self.user_session.post('buy_dog') 

    class Listing(object) 

     def my_dogs(self): 
      self.user_session.get('all_my_dogs') 

user = User() 

user.Action.buy_dog() 

user.Listing.my_dogs() 

я хочу, чтобы создать объект один пользователь с одного себя и делать какие-либо действия с ним

я попробовать:

user.Action().my_dogs() 
AttributeError: type object 'User' has no attribute 'user_session ' 


user.Action.my_dogs() 
TypeError: Action() missing 1 required positional argument: 'self' 
+5

Что вы пытаетесь достичь, поставив два класса внутри другого? – jwodder

ответ

3

Вы только определенные классы внутри пространства имен класса User. Экземпляр User не имеет магических экземпляров внутренних классов (т. Е. В Python нет ничего подобного внутреннему классу). Таким образом, определения классов внутри других классов обычно не полезны.

Вы должны дать другим классам прямую ссылку на ваш user объект:

class User(object): 
    def __init__(self) 
     self.user_session = Session() 
     self.action = Action(self) 
     self.listing = Listing(self) 

    def wallet_sum(self): 
     self.user_session.get('current wallet sum') 

class Action(object): 
    def __init__(self, user): 
     self.user_session = user.user_session 

    def buy_dog(self): 
     self.user_session.post('buy_dog') 

class Listing(object) 
    def __init__(self, user): 
     self.user = user 

    def my_dogs(self): 
     self.user.user_session.get('all_my_dogs') 

user = User() 
user.action.buy_dog() 
user.listing.my_dogs() 
+0

Отличный ответ, Даниэль. Любому любопытно, вот пример того, где может быть полезен вложенный/внутренний класс: http://stackoverflow.com/a/78858/1759987 –

0

AttributeError: type object 'User' has no attribute 'user_session'. Вы получаете это от self.user_session = User.user_session. User не имеет атрибута user_session. Скорее экземпляр User() имеет.

В любом случае, внутренний class es ?? Посмотрите, что произойдет, если вы просто напишите случайный оператор print или def внутри определения class. Совершенно законный и бессмысленный (в целом). Либо

  1. Преобразование их методов
  2. Написать отдельные классы и составляют их в новый класс.
Смежные вопросы