Python:在嵌套类中调用值

时间:2016-09-01 11:50:21

标签: python

我正在尝试从嵌套在A类中的B类中调用值,并在C类中使用它。 我得到了AttributeError:

class A():
    class B():
        a = 1
    class C():
        b = 2
        c = B.a + b 
AttributeError: class B has no attribute 'a'

我也尝试调用From'A',Pycharm认出它,但python仍然得到AttributeError:

class A(object):
    class B(object):
        a = 1
    class C(object):
        b = 2
        c = A.B.a + b 
AttributeError: class A has no attribute 'B'

有人知道如何使用它吗? 感谢

3 个答案:

答案 0 :(得分:1)

问题是,当您调用A时,不会构建类模板(A.B.a)。也就是说,A尚未绑定到类。

尝试此解决方法:

class A():
    class B():
        a = 1

现在单独创建CA已定义):

class C():
    b = 2
    c = A.B.a + b

C引用A

A.C = C

这可以通过元类来完成,但在这里可能会被过度杀死。

答案 1 :(得分:0)

在编译时,类A的类定义不完整,因此您无法访问嵌套类中父类中定义的类,变量和方法。

您可以尝试按照@Reut Sharabani的建议分离类定义。

答案 2 :(得分:0)

您无法通过名称访问该类,而仍会执行类定义语句。

<script>
      $(document).foundation();
      $(document).ready(function() {

          var dataTable = $('#example').DataTable( 
         {

             "language": {
                 "url": "resources/DataTables-1.10.12/DataTables-1.10.12/hebrew.json"
             },
           "columnDefs": [ {

               "targets": [2,3],
             "orderable": false
             },
            { responsivePriority: 1, targets: 0 },
            { responsivePriority: 2, targets: 1 },
            { responsivePriority: 3, targets: 2 },
            { responsivePriority: 4, targets: 3 }
           ],
             responsive: true,
         });

         $("#searchbox").keyup(function() {
             dataTable.fnFilter(this.value);
         });   
         $("#searchbox").on("keyup search input paste cut", function() {
           dataTable.search(this.value).draw();
        }); 
      });

   </script>

要解决此问题,您必须推迟执行这些语句:

  • 将所有这些陈述移至classmethod
  • 在定义类之后调用它们。
class A(object):
   class B(object):
       a = 1
   class C(object):
       b = 2
       c = A.B.a + b # here class A statement is still executed, there is no A class yet