Python Java Sınıfı bir eşdeğer var mı.() forName?
Python string bir değişken alır ve bu sınıfın bir nesne dize adlı oluşturmak için ihtiyaç var. Java, Class.forName().newInstance()
kullanırdım. Python içinde bir karşılığı var mıdır?
Cevaplar için teşekkürler. Ne yaptığımı bilmek isteyenler cevap: komut satırı sınıf adı argüman olarak kullanmak, ve bunu oluşturmak istiyorum. Aslında Jython programlama ve Java dersleri, Java soru-ness dolayısıyla başlatmasını ediyorum. getattr()
harika çalışıyor. Çok teşekkürler.
CEVAP
Python yansıma Java olduğundan çok daha kolay ve çok daha esnektir.
tutorial Bu okumanızı tavsiye ederiz
Yok direkt fonksiyon (bildiğim kadarıyla) de bir tam olarak nitelenmiş sınıf adını döndürür sınıfı, ancak tüm parçaları bir ihtiyaç için inşa ve onları bir araya bağlamak.
Ama bir tavsiye: bir bit python. Java tarzı program için çalışmıyorsun
Eğer yapmaya çalıştığın şey ne anlatsan, belki de bunu yapmanın daha pythonic bir yol bulmanıza yardımcı olabilir.
Burada istediğiniz özellikleri içeren bir fonksiyonu
def get_class( kls ):
parts = kls.split('.')
module = ".".join(parts[:-1])
m = __import__( module )
for comp in parts[1:]:
m = getattr(m, comp)
return m
Eğer sınıfın kendisi sanki bu işlevin dönüş değeri kullanabilirsiniz.
İşte kullanımı bir örnek:
>>> D = get_class("datetime.datetime")
>>> D
<type 'datetime.datetime'>
>>> D.now()
datetime.datetime(2009, 1, 17, 2, 15, 58, 883000)
>>> a = D( 2010, 4, 22 )
>>> a
datetime.datetime(2010, 4, 22, 0, 0)
>>>
Nasıl çalışır?
__import__
biz ilk tam adı modül adı ayıklamak için gerekli olan Sınıf, tutan modülünü almak için kullanıyoruz. Sonra modül alma:
m = __import__( module )
Bu durumda, m
sadece üst düzey modülüne bakın
Eğer sınıf foo.baz
modül içinde yaşarsa, örneğin, daha sonra m
15* *modülü olacak
Kolayca foo.baz
başvuru getattr( m, 'baz' )
kullanarak alabiliriz
Sınıfı için üst düzey modülünden almak için, özyinelemeli olarak sınıf adı parçaları gettatr
kullanın
Eğer sınıf adı foo.baz.bar.Model
değilse örneğin, o zaman bir tek
m = __import__( "foo.baz.bar" ) #m is package foo
m = getattr( m, "baz" ) #m is package baz
m = getattr( m, "bar" ) #m is module bar
m = getattr( m, "Model" ) #m is class Model
Bu döngü içinde neler oluyor
for comp in parts[1:]:
m = getattr(m, comp)
Döngünün sonunda, m
olacak sınıf için bir referans. Bu m
örneğin yapabilirsin aslında sınıf itslef olduğu anlamına gelir:
a = m() #instantiate a new instance of the class
b = m( arg1, arg2 ) # pass arguments to the constructor
Java Python Sözlükler Eşdeğer...
Neden Java Vector sınıfı eski veya kul...
C Çifti eşdeğer<L,R> Java nedir?...
C eşdeğer'#; ler DateTime.Java şim...
Java eşdeğer #c bölgesi#...