저는 뉴런 모델로 작업하고 있습니다. 제가 디자인하고있는 클래스 중 하나는 뉴런의 토폴로지 설명 인 셀 클래스입니다 (여러 구획이 서로 연결되어 있음). 매개 변수가 많지만 모두 관련이 있습니다. 예를 들면 다음과 같습니다.
축삭 분절의 수, 정점 bifibrications, 체세포 길이, 체체 직경, 정점 길이, 분기 임의성, 분기 길이 등 ... 총 15 개의 매개 변수가 있습니다!
이 모든 것을 기본값으로 설정할 수 있지만 내 클래스는 매개 변수에 대한 여러 줄로 미쳐 보입니다. 이런 일이 때때로 다른 사람들에게도 일어나야합니다. 이것을 디자인하는 더 나은 방법이 있습니까, 아니면 제가 옳은 일을하고 있습니까?
업데이트 : 여러분 중 일부가 요청했듯이이 클래스에는 엄청난 수의 매개 변수 (> 15)가 있지만 모두 사용되며 셀의 토폴로지를 정의하는 데 필요합니다. 본질적으로 문제는 그들이 만드는 물리적 객체가 매우 복잡하다는 것입니다. 이 클래스에서 생성 된 객체의 이미지 표현을 첨부했습니다. 숙련 된 프로그래머가 정의에서 너무 많은 매개 변수를 피하기 위해 어떻게 다르게할까요?
class LayerV(__Cell):
def __init__(self,somatic_dendrites=10,oblique_dendrites=10,
somatic_bifibs=3,apical_bifibs=10,oblique_bifibs=3,
L_sigma=0.0,apical_branch_prob=1.0,
somatic_branch_prob=1.0,oblique_branch_prob=1.0,
soma_L=30,soma_d=25,axon_segs=5,myelin_L=100,
apical_sec1_L=200,oblique_sec1_L=40,somadend_sec1_L=60,
ldecf=0.98):
import random
import math
#make main the regions:
axon=Axon(n_axon_seg=axon_segs)
soma=Soma(diam=soma_d,length=soma_L)
main_apical_dendrite=DendriticTree(bifibs=
apical_bifibs,first_sec_L=apical_sec1_L,
L_sigma=L_sigma,L_decrease_factor=ldecf,
first_sec_d=9,branch_prob=apical_branch_prob)
#make the somatic denrites
somatic_dends=self.dendrite_list(num_dends=somatic_dendrites,
bifibs=somatic_bifibs,first_sec_L=somadend_sec1_L,
first_sec_d=1.5,L_sigma=L_sigma,
branch_prob=somatic_branch_prob,L_decrease_factor=ldecf)
#make oblique dendrites:
oblique_dends=self.dendrite_list(num_dends=oblique_dendrites,
bifibs=oblique_bifibs,first_sec_L=oblique_sec1_L,
first_sec_d=1.5,L_sigma=L_sigma,
branch_prob=oblique_branch_prob,L_decrease_factor=ldecf)
#connect axon to soma:
axon_section=axon.get_connecting_section()
self.soma_body=soma.body
soma.connect(axon_section,region_end=1)
#connect apical dendrite to soma:
apical_dendrite_firstsec=main_apical_dendrite.get_connecting_section()
soma.connect(apical_dendrite_firstsec,region_end=0)
#connect oblique dendrites to apical first section:
for dendrite in oblique_dends:
apical_location=math.exp(-5*random.random()) #for now connecting randomly but need to do this on some linspace
apsec=dendrite.get_connecting_section()
apsec.connect(apical_dendrite_firstsec,apical_location,0)
#connect dendrites to soma:
for dend in somatic_dends:
dendsec=dend.get_connecting_section()
soma.connect(dendsec,region_end=random.random()) #for now connecting randomly but need to do this on some linspace
#assign public sections
self.axon_iseg=axon.iseg
self.axon_hill=axon.hill
self.axon_nodes=axon.nodes
self.axon_myelin=axon.myelin
self.axon_sections=[axon.hill]+[axon.iseg]+axon.nodes+axon.myelin
self.soma_sections=[soma.body]
self.apical_dendrites=main_apical_dendrite.all_sections+self.seclist(oblique_dends)
self.somatic_dendrites=self.seclist(somatic_dends)
self.dendrites=self.apical_dendrites+self.somatic_dendrites
self.all_sections=self.axon_sections+[self.soma_sections]+self.dendrites