Fix flag_value class instantiation when default=True#3201
Closed
veeceey wants to merge 1 commit intopallets:mainfrom
Closed
Fix flag_value class instantiation when default=True#3201veeceey wants to merge 1 commit intopallets:mainfrom
veeceey wants to merge 1 commit intopallets:mainfrom
Conversation
When using a class or callable as flag_value with default=True, the class was being instantiated instead of used as-is. This occurred because the option initialization set self.default = self.flag_value when default=True, and later get_default() would call any callable defaults. The fix tracks whether the default was auto-set from True to flag_value and prevents calling it in that case. When users explicitly set default=SomeCallable, it still gets called as expected. Fixes pallets#3121
kdeldycke
added a commit
to kdeldycke/click
that referenced
this pull request
Feb 21, 2026
kdeldycke
added a commit
to kdeldycke/click
that referenced
this pull request
Feb 21, 2026
kdeldycke
added a commit
to kdeldycke/click
that referenced
this pull request
Feb 21, 2026
kdeldycke
added a commit
to kdeldycke/click
that referenced
this pull request
Feb 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #3121
When using a class or callable as
flag_valuewithdefault=True, the class was being instantiated instead of being used as-is in Click 8.3.0.Root Cause
In Click 8.3.0, when
default=Trueandflag_valueis set, the Option initialization automatically setsself.default = self.flag_valueto maintain backward compatibility. However, whenget_default()is later called, it checks if the default is callable and calls it, which causes classes and other callables to be instantiated.Solution
Truetoflag_valueusing a new_default_is_auto_flag_valueflagget_default(), only call the default if it's not an auto-converted flag valuedefault=SomeCallable, it still gets called as expected (preserving existing behavior)Test Plan
default=True, flag_value=SomeClass→ returns class (not instance)default=SomeClass, flag_value=SomeClass→ returns instance (as intended)--flagexplicitly passed → returns class (correct behavior)