宫位对象
Palace 的字段,以及星耀判断、空宫判断与飞星族的全部方法。
宫位是斗数分析的主战场。chart.palace(...) 返回 Palace,
它既持有本宫数据,也能回溯所属星盘、对宫与三方四正。
soul = chart.palace("soulPalace")本页示例统一用默认的 zh-CN 排盘,因此输出里的展示值都是中文。
字段
| 字段 | 类型 | 说明 |
|---|---|---|
index | int | 宫位索引 0–11,0 为寅宫 |
name / name_key | str | 宫名译名 / 标识 |
is_body_palace | bool | 是否身宫 |
is_original_palace | bool | 是否来因宫(宫干与年干相同且不在子丑二宫) |
heavenly_stem / heavenly_stem_key | str | 宫干,决定本宫飞出的四化 |
earthly_branch / earthly_branch_key | str | 宫支,由索引固定:0 为寅、11 为丑 |
major_stars | list[Star] | 十四主星中落在本宫的,按安放顺序 |
minor_stars | list[Star] | 十四辅星中落在本宫的 |
adjective_stars | list[Star] | 杂耀 |
changsheng12 / changsheng12_key | str | 长生十二神,每宫恰好一个 |
boshi12 / boshi12_key | str | 博士十二神 |
jiangqian12 / jiangqian12_key | str | 将前十二神 |
suiqian12 / suiqian12_key | str | 岁前十二神 |
decadal | Decadal | 大限:岁数区间与宫干支 |
ages | list[int] | 小限经过本宫的虚岁列表 |
mutagen_star_keys | list[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参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
stars | list[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参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
mutagen | str | 是 | — | "sihuaLu" / "sihuaQuan" / "sihuaKe" / "sihuaJi" |
返回值 bool。只扫描 major_stars 与 minor_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_stars | list[str] | None | 否 | None | 追加计入的星耀:本宫无主星、但坐了其中任一颗时,同样不算空宫 |
返回值 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参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
target | Palace | int | str | 是 | — | 目标宫:宫位对象、索引、宫名、"bodyPalace" 或 "originalPalace" |
mutagens | str | 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参数
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
mutagens | str | 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_of 与 not_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_palaces | list[Palace] | None | 否 | None | 通常不传,宫位已持有星盘 |
mutagens | str | list[str] | 是 | — | 要取的四化位 |
返回值 mutaged_places 返回长度为 4 的列表,顺序为禄、权、科、忌,
某颗被化的星不在盘上时对应位置为 None。
mutagen_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 时检索范围是本宫所属星盘的十二宫。
脱离星盘单独构造的宫位既没有星盘也没传范围,此时返回空列表而不是四个 None。
mutaged_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
木三局