2016-07-03 5 views
0

私のコード内の名前オブジェクトを参照する:ここそのクラス自体

import math 
    class Cal(object): 

     def __init__(self,precision): 
      self.precision=precision 

     def roundTo(self): 
      if(obj1): 
       return (round(math.pi,self.precision)) 
      elif(obj2): 
       return (round(math.e,self.precision)) 

    precision=int(raw_input("enter number:")) 
    obj1=Cal(precision) 
    answer1=obj1.roundTo() 
    print answer1 
    obj2=Cal(precision) 
    answer2=obj2.roundTo() 
    print answer2 

を私の問題は、私が参照しているオブジェクトに応じて、オブジェクトの両方に二つの異なるものを返すために、同じ方法をしたいです。

def fun_name(self): 
    if(obj1): 
     #return 
    elif(obj2): 
     #return 

私は簡単な方法は、2つの異なる機能を作成して、個々のオブジェクトにそれらのそれぞれを割り当てることです知っている: がこれを行う方法です。しかし、この機能を実現する方法はありますか?

+3

だから、クラスのコードは、どのインスタンスが呼び出されているかによって異なりますか?それは非常に賢明ではないようです。 2つのサブクラスを作成してから、 'obj1 = PiCal(精度)'と 'obj2 = ECal(精度)'を作るのはなぜですか?あるいは、ベース番号( 'math.pi'と' math.e')をインスタンス化で提供される別の引数( 'obj1 =(math.pi、precision)'など)にします。 – jonrsharpe

+0

私はこれを正確に望んでいました。「クラスのコードは、どのインスタンスに呼び出されているかによって異なりますが、そうであることは賢明ではありません。 –

+0

ええ、彼らは同じインターフェイス(同じクラス)に属しています。その不必要な! –

答えて

0

名前でオブジェクトを識別しようとすると、オブジェクトが自分の名前を知らないため、デザインが悪いように見えます。なぜそれが不可能であるか見てみましょう:

# let's have two objects with two names 
obj1 = Cal() 
obj2 = Cal() 

# you can swap names 
obj1, obj2 = obj2, obj1 

# you can have two equally valid names for the same object 
obj3 = obj1 

# you can reuse a name for something else 
obj2saved = obj2 
obj2 = None 

# and you can have objects without a name 
obj_set = { Cal(), Cal() } 
関連する問題