【问题标题】:one self for class in class课堂上的一个自我
【发布时间】:2016-08-02 01:19:12
【问题描述】:

如何在少数子类中使用一个自实例 有一些这样的代码:

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'

【问题讨论】:

  • 你想通过将两个类放在另一个类中来达到什么目的?

标签: python oop python-3.x


【解决方案1】:

您只在类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()

【讨论】:

【解决方案2】:

AttributeError: type object 'User' has no attribute 'user_session'。你从self.user_session = User.user_session 得到这个。 User 没有名为 user_session 的属性。而是User() 的实例。

不管怎样,内心classes??看看如果你只是在class 定义中写一个随机的print 语句或def 会发生什么。这是完全合法毫无意义(一般)。要么

  1. 将它们转换为方法
  2. 编写单独的类并将它们组合到一个新类中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-10
    • 2015-03-27
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多