class A:
attr1 = "A"
class B:
print(attr1)
Örnek veriyorum bunu nasıl yazdırabiliriz?
class A:
attr1 = "A"
class B:
print(attr1)
Örnek veriyorum bunu nasıl yazdırabiliriz?
class A:
global attr1
attr1 = "A"
class B:
print(attr1)
class A():
def __init__(self):
self.attr1 = "A"
class B(A):
def __init__(self):
super().__init__()
print(self.attr1)
x = B()
Output
A
Merhaba, ben böyle bir durumda şu yapıyı tercih ederdim.
class d:
class f():
def __init__(self, d_self):
print("f", self)
print("d", d_self)
def __init__(self):
# print("d", self)
x = self.f(self)
G = d()
d class in içindeki self, f ye parametre olarak geçtiğimiz d_self in bizzat ama bizzat kendisidir. İnanmıyorsan id
fonksiyonuyla işlerini karşılaştır. d_self de yapacağın değişiklik, f nin self ini de etkiler. Birkaç kaynak daha bulursam editleyip göstermek isterim. Maalesef hiç vaktim yok şu anlık, vize haftası.
Yazdiramayiz cunku daha A ve B siniflari tanimli degil.
Bu ust sinifin degil, global scope’taki A.
Kodu method icine aliyorsak baska bir degisiklige gerek yok:
class A:
attr1 = "A"
class B:
def foo():
print(A.attr1)
x = A.B.foo()
Peki bir A nesnesinin attr1’ine nasıl ulaşacağız? Örneğin attr1 nesne oluşturulurken başka bir değer alabilir.
bir_a_nesnesi.attr1
Sınıfın içinden ulaşmaya çalışıyorum. Daha ortada üretilmiş bir nesne yok yani. Dışarıdan ulaşsam dediğiniz olur. Yani basit anlamda bir üst elemanın self’ine erişmeye çalışıyorum.
Doğrusu ne demek istediğinizi anlamadım, az önce bir nesnenin niteliğine nasıl ulaşacağınızı sormadınız mı?
"Üst elemanın self"i ne demek bilmiyorum ama A
sınıfını kastediyorsanız bu cevaplanmış zaten:
Bu arada sınıflar “içinde tanımlanmış olma” gibi bir hiyerarşik sisteme sahip değiller, o yüzden sınıflarınızı farklı bir şekilde düzenlemeniz işinizi kolaylaştırabilir.
Siz bir sınıfın niteliğine ulaşıyorsunuz bense bir nesnenin içeriğine ulaşmak istiyorum. Hiyerarşiyi değiştirmem lazım eğer yöntemini bulamazsam.
Hocam benim yazdığım kod işinizi görür, ama dedikleri gibi hiyerarşiyi değiştirmek çok daha iyi olabilir, bilemem.
Şimdi o kaynakları gösterebilirim.
https://gist.github.com/itu-itis21-altiparmak20/1466bf4e85cadadc3b7c7a4ffbf182c2
Bu yazdığım kodda bunun örneği var, bizzat deneyerek gördüm, kaynağım bu.
orc = Orcs("Orcs", 10, 20 ,30, 40)
dwarf = Dwarves("Dwarves", 11, 21, 31, 41)
elf = Elves("Elves", 12, 22, 32, 42)
merchant = Merchant(5, 4)
orc.AssgnEnemies(dwarf, elf)
dwarf.AssgnEnemies(orc, elf)
elf.AssgnEnemies(orc, dwarf)
merchant.AssgnFactions(orc, dwarf, elf)
Eğer yazdığım kodu incelemisseniz böyle bir parça göreceksiniz. Burada her karakter için onların düşmanlarını atiyoruz. Ve sonra atak yaptığımızda assign ettiğimiz düşmanların canı vs. azalıyor. Bu benim için güzel bir deneyimdi
Bu arada kod, proje takımlarına girmek için yazdığım basit bir mülakat kodu gibi bir şeydi. Basit bir konsolda text oyunu
Sağ olun hocam, teşekkür ederim, bilgim tazelendi, ama ben de olayı bir instance ı tabiri caizse bir alt class ta kullanmak diye anlamıştım.
Hepsi mumkun; hatta belki python sihiriyle tam olarak soruda sorulani yapmak da mumkundur ama dogru degil.
Sizin cozumun dogrulugundan da emin degilim, yapilmak istenene gore dogru da olabilir, daha “dogru” (okumasi, yazmasi kolay, maintain edilebilir) bir cozum de olabilir. Bilmedigim icin yorum yapmadim.