Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Jaký je rozdíl ve volání method uvnitř class v PY

Ahoj, jaký je rozdíl ve volání method přímo z constructoru uvnitř class? Je to jedno nebo ne? První je daleko přehlednější pro orientaci v kódu s lines > 10000. Díky

class model():
	def __init__(self):
		model.name1()
		model.name2()
		model.name3()
	def name1(self):
		pass
	def name2(self):
		pass
	def name3(self):
		pass

class model():
	def __init__(self):
		self.name1()
		self.name2()
		self.name3()
	def name1(self):
		pass
	def name2(self):
		pass
	def name3(self):
		pass
		

Předmět Autor Datum
Vážně nikdo neporadi? :-(
m.a.r.a. 07.02.2022 20:10
m.a.r.a.
IMHO to první volá metody classy (a je to blbě syntakticky), to druhé metody instance a pokud s tou…
gilhad 07.02.2022 20:44
gilhad
Eventuálně takto class model(): x=0 def __init__(self): print("model:") model.name1() model.name2(…
gilhad 07.02.2022 20:53
gilhad
Díky, tím jsi mi objasnil spoustu záhad v mém kódu. poslední
m.a.r.a. 07.02.2022 22:55
m.a.r.a.

IMHO to první volá metody classy (a je to blbě syntakticky), to druhé metody instance
a pokud s tou classou, nebo instancí budeš něco dělat, tak se to zachová jinak



class model():
	x=0
	def __init__(self):
		print("model:")
		model.name1(model)
		model.name2(model)
		model.name3(model)
	def name1(self):
		self.x += 1
		print(self.x)
		pass
	def name2(self):
		self.x += 1
		print(self.x)
		pass
	def name3(self):
		self.x += 1
		print(self.x)
		pass

class model2():
	x=0
	def __init__(self):
		print("model2:")
		self.name1()
		self.name2()
		self.name3()
	def name1(self):
		self.x += 1
		print(self.x)
		pass
	def name2(self):
		self.x += 1
		print(self.x)
		pass
	def name3(self):
		self.x += 1
		print(self.x)
		pass
		
ma=model()
mb=model()

mc=model2()
md=model2()

tedy po mírné úpravě, aby to prošlo překladem a cosi dělalo, tak to vypadá takto: (najdi rozdíly)


 $ ./model.py
model:
1
2
3
model:
4
5
6
model2:
1
2
3
model2:
1
2
3

Eventuálně takto


class model():
	x=0
	def __init__(self):
		print("model:")
		model.name1()
		model.name2()
		model.name3()
	def name1():
		model.x += 1
		print(model.x)
		pass
	def name2():
		model.x += 1
		print(model.x)
		pass
	def name3():
		model.x += 1
		print(model.x)
		pass

class model2():
	x=0
	def __init__(self):
		print("model2:")
		self.name1()
		self.name2()
		self.name3()
	def name1(self):
		self.x += 1
		print(self.x)
		pass
	def name2(self):
		self.x += 1
		print(self.x)
		pass
	def name3(self):
		self.x += 1
		print(self.x)
		pass
		
ma=model()
mb=model()

mc=model2()
md=model2()

Prostě je rozdíl, zda voláš metody třídy, nebo metody instance, protože se (nepřekvapivě) metody třídy vztahují na třídu a metody instance na instanci

Zkus si s tím trochu pohrát sám

Zpět do poradny Odpovědět na původní otázku Nahoru