导入已关闭的方法和属性

时间:2017-06-29 09:55:23

标签: python

我正在尝试导入我的类,以便在另一个中使用它的属性。 是否可以为派生类调用基本类的方法?在基本类中有方法,其中包含封闭方法的封闭方法。

或者我应该打开它的方法及其属性来调用它们吗? 那么,我想给你举个例子,请帮助我吗?我失去了一点点。

我有一个基础课(1):

   class Car (object):
    """Virtual car"""

   total=0

   def __init__(self,petrol=100): 
        self.__petrol=petrol

    @property
        def petrol(self):
        return self.__petrol

    @petrol.setter
    def petrol(self,new_petrol):
        self.__petrol=new_petrol
       print("The level of petrol was changed")

    def __str__(self):
         print("Car condition")
         print(" "+ self.__petrol )

    def __addPetrol(self):
         print("Welcome to petrol station!")
         addPetr=int(input("Enter quanity of litres: "))
         self.__petrol=self.petrol+addPetr
         print("Thank you for visit the OIL service!")

    def __visitSrvice(self):
       print("""
           1. pour some petrol
           2. poor some oil
              """)
       visit=int(input("Choose a turn"))
       if 1==visit :
           self.__addPetrol()

       if 2==visit :
        ..............
    def go(self):
          print("""
          1. Go on your journey
          2. Visit a service
              """)
          gg = int(input("Choose  your action"))
           if 1==gg :
              ..................
          if 2==gg :
               self.__visitSrvice()

      if __name__ == "__main__":
            print("Use modul correctly")
            input("press enter to out")

然后我尝试将基本类导入另一个文件,然后调用一个函数,请查看:

  import Mcar

  class Chassis_Engine(object):
        def Deterioration(self):


        def Recovering(self):
            Mcar.Car.visitService(self)

  ce=Chassis_Engine()
  ce.Recovering()

当然,我有一个错误,其中包含:

  

追踪(最近一次通话):     文件“E:/car/car.py”,第11行,in       ce.Recovering()

     

文件“E:/car/car.py”,第8行,在恢复中       Mcar.Car.visitService(个体)

     

AttributeError:类型对象'Car'没有属性'visitService'

请跟我说,如果我不想打开封闭的方法和属性,我可以这样做吗?如果不是,我该怎么办?感谢。

1 个答案:

答案 0 :(得分:0)

有一个名为dir的函数可以为您提供类提供的所有方法。观察:

>>> class A:
...   def __hidden():
...     print('hello')
...     
>>> dir(A)
['_A__hidden', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']

第一种方法(_A__hidden)就是你要找的。

一般来说,Python中没有真正的“私有”方法。相反,您可以使用这些“双下划线”方法,但这些方法是公开的,但使用修改后的名称_ClassName__MethodName