宫位对象

Palace 的字段,以及星耀判断、空宫判断与飞星族的全部方法。

宫位是斗数分析的主战场。chart.palace(...) 返回 Palace, 它既持有本宫数据,也能回溯所属星盘、对宫与三方四正。

soul = chart.palace("soulPalace")

本页示例统一用默认的 zh-CN 排盘,因此输出里的展示值都是中文。

字段

字段类型说明
indexint宫位索引 0–11,0 为寅宫
name / name_keystr宫名译名 / 标识
is_body_palacebool是否身宫
is_original_palacebool是否来因宫(宫干与年干相同且不在子丑二宫)
heavenly_stem / heavenly_stem_keystr宫干,决定本宫飞出的四化
earthly_branch / earthly_branch_keystr宫支,由索引固定:0 为寅、11 为丑
major_starslist[Star]十四主星中落在本宫的,按安放顺序
minor_starslist[Star]十四辅星中落在本宫的
adjective_starslist[Star]杂耀
changsheng12 / changsheng12_keystr长生十二神,每宫恰好一个
boshi12 / boshi12_keystr博士十二神
jiangqian12 / jiangqian12_keystr将前十二神
suiqian12 / suiqian12_keystr岁前十二神
decadalDecadal大限:岁数区间与宫干支
ageslist[int]小限经过本宫的虚岁列表
mutagen_star_keyslist[str]本宫宫干化出的四颗星标识,顺序为禄、权、科、忌

四组十二神与三组星耀的区别

主星、辅星、杂耀是列表,一宫可以有零到多颗。 长生、博士、将前、岁前十二神是每宫恰好一个的标记,十二宫刚好排满一轮, 因此是单值字段而不是列表。

mutagen_star_keys 是宫干四化,不是生年四化

它由排盘时生效的四化表算得——自定义四化表(ChartConfig(mutagens=...)) 会反映在这里,飞星族方法读的正是它。 生年四化是打在星耀自身 mutagen_key 字段上的标记,两者不是一回事。


has / not_have / has_one_of

用途 判断本宫坐了哪些星。

斗数含义 星耀落宫是斗数的基本盘面信息。「命宫坐紫微天相」即 has(["ziweiMaj", "tianxiangMaj"])。查找范围覆盖主星、辅星、杂耀三组。

签名

def has(self, stars: list[str]) -> bool
def not_have(self, stars: list[str]) -> bool
def has_one_of(self, stars: list[str]) -> bool

参数

参数类型必填默认说明
starslist[str]星耀标识列表;也接受当前排盘语言下的星名

返回值

方法语义
has列表中每一颗都在本宫
not_have列表中一颗都不在本宫
has_one_of列表中至少一颗在本宫

示例

from x_iztro import MajorStar, MinorStar

soul = chart.palace("soulPalace")

print(soul.has([MajorStar.ZIWEI, MajorStar.TIANXIANG]))
print(soul.has_one_of([MajorStar.QISHA, MajorStar.ZIWEI]))
print(soul.not_have([MinorStar.HUOXING, MinorStar.LINGXING]))

输出

False
True
True

这张盘的命宫只坐紫微,天相落在财帛宫,因此要求两颗都在的 has 为假。

边界与陷阱


has_mutagen / not_have_mutagen

用途 判断本宫有没有某种四化。

斗数含义 本命四化由生年干决定,标记打在对应的星上。 一宫「有化禄」意味着这宫里坐着的某颗星被生年干化了禄。 注意这与飞星不同——飞星看的是宫干,本处看的是星上已有的标记。

签名

def has_mutagen(self, mutagen: Mutagen) -> bool
def not_have_mutagen(self, mutagen: Mutagen) -> bool

参数

参数类型必填默认说明
mutagenstr"sihuaLu" / "sihuaQuan" / "sihuaKe" / "sihuaJi"

返回值 bool。只扫描 major_starsminor_stars不看杂耀

示例

from x_iztro import Mutagen

children = chart.palace("childrenPalace")

print("子女宫有化禄:", children.has_mutagen(Mutagen.LU))
print("子女宫无化忌:", children.not_have_mutagen(Mutagen.JI))

输出

子女宫有化禄: True
子女宫无化忌: True

边界与陷阱

不扫杂耀

has_mutagen 只看主星与辅星上的四化标记,杂耀即使带标记也不计入(复刻 iztro 的行为)。 生年四化只会落在十四主星与部分辅星上,因此实际盘面上两种口径通常没有差别。


is_empty

用途 判断本宫是否空宫。

斗数含义 「空宫」指没有十四主星坐守的宫。空宫要借对宫主星来看, 是斗数里一个很常见的判断分支。辅星与杂耀默认不影响空宫的成立。

签名

def is_empty(self, exclude_stars: list[str] | None = None) -> bool

参数

参数类型必填默认说明
exclude_starslist[str] | NoneNone追加计入的星耀:本宫无主星、但坐了其中任一颗时,同样不算空宫

返回值 bool。判定顺序是:先看有无主星,有则不空;再看 exclude_stars,命中则不空;都不满足才是空宫。

示例

parents = chart.palace("parentsPalace")
print("父母宫空宫:", parents.is_empty())
print("仆役宫空宫:", chart.palace("friendsPalace").is_empty())

# 父母宫无主星,但坐了陀罗——把陀罗也计入后就不算空宫
print("父母宫计入陀罗:", parents.is_empty(["tuoluoMin"]))

输出

父母宫空宫: True
仆役宫空宫: False
父母宫计入陀罗: False

这张盘只有父母、田宅两宫无主星。仆役宫坐太阴,因此不算空宫。

边界与陷阱


flies_to / flies_one_of_to / not_fly_to

用途 判断本宫宫干的四化是否飞入目标宫。

斗数含义 飞星派的核心手法。每个宫位有自己的宫干,宫干按四化表决定 哪四颗星化禄、权、科、忌。若被化的那颗星恰好坐在目标宫,就叫「本宫化 X 入目标宫」。 「命宫化禄入财帛」表达的是命宫这件事的顺遂落在财帛上。

签名

def flies_to(self, target: Palace | int | str, mutagens: Mutagen | list[Mutagen]) -> bool
def flies_one_of_to(self, target: Palace | int | str, mutagens: Mutagen | list[Mutagen]) -> bool
def not_fly_to(self, target: Palace | int | str, mutagens: Mutagen | list[Mutagen]) -> bool

参数

参数类型必填默认说明
targetPalace | int | str目标宫:宫位对象、索引、宫名、"bodyPalace""originalPalace"
mutagensstr | list[str]要检查的四化,单个或列表

返回值

方法语义
flies_to列出的四化全部飞入目标宫
flies_one_of_to列出的四化至少一个飞入目标宫
not_fly_to列出的四化一个都不飞入目标宫

示例

from x_iztro import Mutagen, PalaceName

soul = chart.palace("soulPalace")

print("命宫化禄入财帛:", soul.flies_to(PalaceName.WEALTH, Mutagen.LU))
print("命宫化禄或忌入迁移:", soul.flies_one_of_to(PalaceName.SURFACE, [Mutagen.LU, Mutagen.JI]))
print("命宫不化权入子女:", soul.not_fly_to(PalaceName.CHILDREN, Mutagen.QUAN))

输出

命宫化禄入财帛: False
命宫化禄或忌入迁移: False
命宫不化权入子女: True

边界与陷阱


self_mutaged / self_mutaged_one_of / not_self_mutaged

用途 判断本宫是否自化。

斗数含义 自化指本宫宫干化出的星恰好就坐在本宫。 含义上是「自己把自己的能量释放掉」,与飞入他宫的定向作用不同。

签名

def self_mutaged(self, mutagens: Mutagen | list[Mutagen]) -> bool
def self_mutaged_one_of(self, mutagens: Mutagen | list[Mutagen] | None = None) -> bool
def not_self_mutaged(self, mutagens: Mutagen | list[Mutagen] | None = None) -> bool

参数

参数类型必填默认说明
mutagensstr | list[str] | None视方法None要检查的四化;后两个方法省略时表示「四化全部」

返回值

方法语义
self_mutaged列出的四化全部自化
self_mutaged_one_of列出的四化至少一个自化;省略参数时检查全部四化
not_self_mutaged列出的四化一个都不自化;省略参数时检查全部四化

示例

career = chart.palace("careerPalace")

print("官禄宫自化禄:", career.self_mutaged(Mutagen.LU))
print("官禄宫自化忌:", career.self_mutaged(Mutagen.JI))
print("官禄宫有任一自化:", career.self_mutaged_one_of())
print("官禄宫无任何自化:", career.not_self_mutaged())

输出

官禄宫自化禄: False
官禄宫自化忌: True
官禄宫有任一自化: True
官禄宫无任何自化: False

官禄宫宫干为丙,丙干化忌在廉贞,而廉贞正坐官禄宫,故成自化忌。

边界与陷阱

空列表在这三个方法里的含义不同于飞星族

self_mutaged_one_ofnot_self_mutaged 把不传参数(或空列表)解释为「全部四化」。 self_mutaged 不做这层回退,空列表退化成「本宫是否包含空集」,恒为 True—— 与 flies_to 的空列表判假正好相反,别把两者的直觉混用。


mutaged_places / mutagen_stars

用途 取本宫宫干化出的四颗星分别落在哪些宫,或直接取那四颗星本身。

斗数含义 飞星分析的全景版本:不问「有没有飞到某宫」,而是一次拿到禄权科忌的落点。

签名

def mutaged_places(self, all_palaces: list[Palace] | None = None) -> list[Palace | None]
def mutagen_stars(self, mutagens: Mutagen | list[Mutagen]) -> list[str]

参数

参数类型必填默认说明
all_palaceslist[Palace] | NoneNone通常不传,宫位已持有星盘
mutagensstr | list[str]要取的四化位

返回值 mutaged_places 返回长度为 4 的列表,顺序为禄、权、科、忌, 某颗被化的星不在盘上时对应位置为 Nonemutagen_stars 返回星耀标识列表,顺序与传入的四化一致。

示例

soul = chart.palace("soulPalace")

for m, place in zip(["禄", "权", "科", "忌"], soul.mutaged_places()):
    print(f"化{m} →", place.name if place else "不在盘上")

print(soul.mutagen_stars([Mutagen.LU, Mutagen.JI]))

输出

化禄 → 子女
化权 → 命宫
化科 → 官禄
化忌 → 财帛
['tianliangMaj', 'wuquMaj']

命宫宫干为壬,壬干四化为天梁化禄、紫微化权、左辅化科、武曲化忌, 四颗星分别坐在子女、命宫、官禄、财帛四宫。

不传 all_palaces 时检索范围是本宫所属星盘的十二宫。 脱离星盘单独构造的宫位既没有星盘也没传范围,此时返回空列表而不是四个 Nonemutaged_places 恒按禄、权、科、忌四位取,不受参数影响; 要挑其中几位用 mutagen_stars


opposite_palace / surrounded_palaces / astrolabe

用途 从宫位回溯到对宫、三方四正与所属星盘。

签名

def opposite_palace(self) -> Palace | None
def surrounded_palaces(self) -> SurroundedPalaces | None
def astrolabe(self) -> Astrolabe | None

返回值 脱离星盘单独构造的宫位返回 None;由星盘查询得到的宫位必然非空。

示例

soul = chart.palace("soulPalace")

print(soul.name, "的对宫是", soul.opposite_palace().name)
print("三方四正见煞:", soul.surrounded_palaces().have_one_of(["huoxingMin", "lingxingMin"]))
print(soul.astrolabe().five_elements_class)

输出

命宫 的对宫是 迁移
三方四正见煞: True
木三局

本页目录