
GITHUB . COM {
}
Detected CMS Systems:
- Wordpress (2 occurrences)
Title:
How to store references to objects in pydantic models, not copies Β· pydantic/pydantic Β· Discussion #2929 Β· GitHub
Description:
Hi, I make a quick example to illustrate my point: import pydantic from dataclasses import dataclass from pydantic import BaseModel """When using BaseModel as base class for Point, changes are not ...
Website Age:
17 years and 8 months (reg. 2007-10-09).
Matching Content Categories {π}
- Graphic Design
- Books & Literature
- Fitness & Wellness
Content Management System {π}
What CMS is github.com built with?
Github.com relies on WORDPRESS.
Traffic Estimate {π}
What is the average monthly size of github.com audience?
ππ Tremendous Traffic: 10M - 20M visitors per month
Based on our best estimate, this website will receive around 10,000,019 visitors per month in the current month.
However, some sources were not loaded, we suggest to reload the page to get complete results.
check SE Ranking
check Ahrefs
check Similarweb
check Ubersuggest
check Semrush
How Does Github.com Make Money? {πΈ}
Subscription Packages {π³}
We've located a dedicated page on github.com that might include details about subscription plans or recurring payments. We identified it based on the word pricing in one of its internal links. Below, you'll find additional estimates for its monthly recurring revenues.How Much Does Github.com Make? {π°}
Subscription Packages {π³}
Prices on github.com are in US Dollars ($).
They range from $4.00/month to $21.00/month.
We estimate that the site has approximately 4,989,889 paying customers.
The estimated monthly recurring revenue (MRR) is $20,957,532.
The estimated annual recurring revenues (ARR) are $251,490,385.
Wordpress Themes and Plugins {π¨}
What WordPress theme does this site use?
It is strange but we were not able to detect any theme on the page.
What WordPress plugins does this website use?
It is strange but we were not able to detect any plugins on the page.
Keywords {π}
point, class, float, end, line, start, linestartx, assert, pydantic, therealsupermario, import, dataclass, sign, prettywood, basemodel, linestart, startx, question, make, pointbasemodel, def, initself, superinitxx, pydanticdataclassesdataclass, answer, replies, navigation, code, security, answered, dataclasses, base, forwarded, checked, configcopyonmodelvalidation, config, copyonmodelvalidation, false, hope, helps, comment, author, github, footer, skip, content, menu, product, solutions, resources,
Topics {βοΈ}
prettywood therealsupermario asked dataclasses import dataclass dataclass class line2 dataclass class point pydantic import basemodel import pydantic therealsupermario author prettywood sign pydantic models question therealsupermario base class class point data class class config line1 = line1 store references nuanced difference checked config personal information basemodel behave start2 = point end1 = point end2 = point prettywood dataclass question line1 make point __init__ start1 line2 copy_on_model_validation github dataclasses float basemodel start2 end1 end2 sign skip jump objects quick illustrate forwarded super start wondering
Payment Methods {π}
- Braintree
Questions {β}
- Already have an account?
Schema {πΊοΈ}
QAPage:
context:https://schema.org
mainEntity:
type:Question
name:How to store references to objects in pydantic models, not copies
text:<p dir="auto">Hi,</p>
<p dir="auto">I make a quick example to illustrate my point:</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/6517465/122576196-b73ba580-d051-11eb-91d5-0181cf333704.png"><img src="https://user-images.githubusercontent.com/6517465/122576196-b73ba580-d051-11eb-91d5-0181cf333704.png" alt="Bildschirmfoto 2021-06-18 um 16 17 07" style="max-width: 100%;"></a></p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import pydantic
from dataclasses import dataclass
from pydantic import BaseModel
&quot;&quot;&quot;When using BaseModel as base class for Point, changes are not forwarded to Point&quot;&quot;&quot;
class Point(BaseModel):
x: float
y: float
z: float
def __init__(self, x, y, z) -&gt; None:
super().__init__(x=x, y=y, z=z)
@dataclass
class Line1:
start: Point
end: Point
@pydantic.dataclasses.dataclass
class Line2:
start: Point
end: Point
start1 = Point(0, 0, 0)
end1 = Point(1, 0, 0)
start2 = Point(0, 0, 0)
end2 = Point(1, 0, 0)
line1 = Line1(start1, end1)
line1.start.x += 1
assert line1.start.x == 1
assert start1.x == 1
line2 = Line2(start2, end2)
line2.start.x += 1
assert line2.start.x == 1
assert start2.x == 1"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-s1">pydantic</span>
<span class="pl-k">from</span> <span class="pl-s1">dataclasses</span> <span class="pl-k">import</span> <span class="pl-s1">dataclass</span>
<span class="pl-k">from</span> <span class="pl-s1">pydantic</span> <span class="pl-k">import</span> <span class="pl-v">BaseModel</span>
<span class="pl-s">"""When using BaseModel as base class for Point, changes are not forwarded to Point"""</span>
<span class="pl-k">class</span> <span class="pl-v">Point</span>(<span class="pl-v">BaseModel</span>):
<span class="pl-s1">x</span>: <span class="pl-smi">float</span>
<span class="pl-s1">y</span>: <span class="pl-smi">float</span>
<span class="pl-s1">z</span>: <span class="pl-smi">float</span>
<span class="pl-k">def</span> <span class="pl-en">__init__</span>(<span class="pl-s1">self</span>, <span class="pl-s1">x</span>, <span class="pl-s1">y</span>, <span class="pl-s1">z</span>) <span class="pl-c1">-&gt;</span> <span class="pl-c1">None</span>:
<span class="pl-en">super</span>().<span class="pl-c1">__init__</span>(<span class="pl-s1">x</span><span class="pl-c1">=</span><span class="pl-s1">x</span>, <span class="pl-s1">y</span><span class="pl-c1">=</span><span class="pl-s1">y</span>, <span class="pl-s1">z</span><span class="pl-c1">=</span><span class="pl-s1">z</span>)
<span class="pl-en">@<span class="pl-s1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Line1</span>:
<span class="pl-s1">start</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">end</span>: <span class="pl-smi">Point</span>
<span class="pl-en">@<span class="pl-s1">pydantic</span>.<span class="pl-c1">dataclasses</span>.<span class="pl-c1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Line2</span>:
<span class="pl-s1">start</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">end</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">start1</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">end1</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">1</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">start2</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">end2</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">1</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">line1</span> <span class="pl-c1">=</span> <span class="pl-en">Line1</span>(<span class="pl-s1">start1</span>, <span class="pl-s1">end1</span>)
<span class="pl-s1">line1</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">line1</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">start1</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-s1">line2</span> <span class="pl-c1">=</span> <span class="pl-en">Line2</span>(<span class="pl-s1">start2</span>, <span class="pl-s1">end2</span>)
<span class="pl-s1">line2</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">line2</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">start2</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span></pre></div>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import pydantic
from dataclasses import dataclass
from pydantic import BaseModel
&quot;&quot;&quot;When using dataclass as base class for Point, changes ARE forwarded to Point&quot;&quot;&quot;
@pydantic.dataclasses.dataclass
class Point:
x: float
y: float
z: float
@dataclass
class Line1:
start: Point
end: Point
@pydantic.dataclasses.dataclass
class Line2:
start: Point
end: Point
start1 = Point(0, 0, 0)
end1 = Point(1, 0, 0)
start2 = Point(0, 0, 0)
end2 = Point(1, 0, 0)
line1 = Line1(start1, end1)
line1.start.x += 1
assert line1.start.x == 1
assert start1.x == 1
line2 = Line2(start2, end2)
line2.start.x += 1
assert line2.start.x == 1
assert start2.x == 1"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-s1">pydantic</span>
<span class="pl-k">from</span> <span class="pl-s1">dataclasses</span> <span class="pl-k">import</span> <span class="pl-s1">dataclass</span>
<span class="pl-k">from</span> <span class="pl-s1">pydantic</span> <span class="pl-k">import</span> <span class="pl-v">BaseModel</span>
<span class="pl-s">"""When using dataclass as base class for Point, changes ARE forwarded to Point"""</span>
<span class="pl-en">@<span class="pl-s1">pydantic</span>.<span class="pl-c1">dataclasses</span>.<span class="pl-c1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Point</span>:
<span class="pl-s1">x</span>: <span class="pl-smi">float</span>
<span class="pl-s1">y</span>: <span class="pl-smi">float</span>
<span class="pl-s1">z</span>: <span class="pl-smi">float</span>
<span class="pl-en">@<span class="pl-s1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Line1</span>:
<span class="pl-s1">start</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">end</span>: <span class="pl-smi">Point</span>
<span class="pl-en">@<span class="pl-s1">pydantic</span>.<span class="pl-c1">dataclasses</span>.<span class="pl-c1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Line2</span>:
<span class="pl-s1">start</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">end</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">start1</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">end1</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">1</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">start2</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">end2</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">1</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">line1</span> <span class="pl-c1">=</span> <span class="pl-en">Line1</span>(<span class="pl-s1">start1</span>, <span class="pl-s1">end1</span>)
<span class="pl-s1">line1</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">line1</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">start1</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-s1">line2</span> <span class="pl-c1">=</span> <span class="pl-en">Line2</span>(<span class="pl-s1">start2</span>, <span class="pl-s1">end2</span>)
<span class="pl-s1">line2</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">line2</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">start2</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span></pre></div>
<p dir="auto">I was just wondering:</p>
<ol dir="auto">
<li>if this nuanced difference in behaviour is intentional, and where I could find this in the doc</li>
<li>How can I make a BaseModel behave like the data class (i.e. make code block 1 run).</li>
</ol>
<p dir="auto">Thanks guys. Cheers Β πΊ</p>
upvoteCount:1
answerCount:1
acceptedAnswer:
type:Answer
text:<p dir="auto">Hi <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/theRealSuperMario/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/theRealSuperMario">@theRealSuperMario</a><br>
Have you checked <a href="https://pydantic-docs.helpmanual.io/usage/model_config/#change-behaviour-globally" rel="nofollow"><code class="notranslate">Config.copy_on_model_validation</code></a> ? :)</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Point(BaseModel):
x: float
y: float
z: float
def __init__(self, x, y, z) -&gt; None:
super().__init__(x=x, y=y, z=z)
class Config:
copy_on_model_validation = False"><pre class="notranslate"><span class="pl-k">class</span> <span class="pl-v">Point</span>(<span class="pl-v">BaseModel</span>):
<span class="pl-s1">x</span>: <span class="pl-smi">float</span>
<span class="pl-s1">y</span>: <span class="pl-smi">float</span>
<span class="pl-s1">z</span>: <span class="pl-smi">float</span>
<span class="pl-k">def</span> <span class="pl-en">__init__</span>(<span class="pl-s1">self</span>, <span class="pl-s1">x</span>, <span class="pl-s1">y</span>, <span class="pl-s1">z</span>) <span class="pl-c1">-&gt;</span> <span class="pl-c1">None</span>:
<span class="pl-en">super</span>().<span class="pl-c1">__init__</span>(<span class="pl-s1">x</span><span class="pl-c1">=</span><span class="pl-s1">x</span>, <span class="pl-s1">y</span><span class="pl-c1">=</span><span class="pl-s1">y</span>, <span class="pl-s1">z</span><span class="pl-c1">=</span><span class="pl-s1">z</span>)
<span class="pl-k">class</span> <span class="pl-v">Config</span>:
<span class="pl-s1">copy_on_model_validation</span> <span class="pl-c1">=</span> <span class="pl-c1">False</span></pre></div>
<p dir="auto">Hope it helps!</p>
upvoteCount:1
url:https://github.com/pydantic/pydantic/discussions/2929#discussioncomment-888698
Question:
name:How to store references to objects in pydantic models, not copies
text:<p dir="auto">Hi,</p>
<p dir="auto">I make a quick example to illustrate my point:</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/6517465/122576196-b73ba580-d051-11eb-91d5-0181cf333704.png"><img src="https://user-images.githubusercontent.com/6517465/122576196-b73ba580-d051-11eb-91d5-0181cf333704.png" alt="Bildschirmfoto 2021-06-18 um 16 17 07" style="max-width: 100%;"></a></p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import pydantic
from dataclasses import dataclass
from pydantic import BaseModel
&quot;&quot;&quot;When using BaseModel as base class for Point, changes are not forwarded to Point&quot;&quot;&quot;
class Point(BaseModel):
x: float
y: float
z: float
def __init__(self, x, y, z) -&gt; None:
super().__init__(x=x, y=y, z=z)
@dataclass
class Line1:
start: Point
end: Point
@pydantic.dataclasses.dataclass
class Line2:
start: Point
end: Point
start1 = Point(0, 0, 0)
end1 = Point(1, 0, 0)
start2 = Point(0, 0, 0)
end2 = Point(1, 0, 0)
line1 = Line1(start1, end1)
line1.start.x += 1
assert line1.start.x == 1
assert start1.x == 1
line2 = Line2(start2, end2)
line2.start.x += 1
assert line2.start.x == 1
assert start2.x == 1"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-s1">pydantic</span>
<span class="pl-k">from</span> <span class="pl-s1">dataclasses</span> <span class="pl-k">import</span> <span class="pl-s1">dataclass</span>
<span class="pl-k">from</span> <span class="pl-s1">pydantic</span> <span class="pl-k">import</span> <span class="pl-v">BaseModel</span>
<span class="pl-s">"""When using BaseModel as base class for Point, changes are not forwarded to Point"""</span>
<span class="pl-k">class</span> <span class="pl-v">Point</span>(<span class="pl-v">BaseModel</span>):
<span class="pl-s1">x</span>: <span class="pl-smi">float</span>
<span class="pl-s1">y</span>: <span class="pl-smi">float</span>
<span class="pl-s1">z</span>: <span class="pl-smi">float</span>
<span class="pl-k">def</span> <span class="pl-en">__init__</span>(<span class="pl-s1">self</span>, <span class="pl-s1">x</span>, <span class="pl-s1">y</span>, <span class="pl-s1">z</span>) <span class="pl-c1">-&gt;</span> <span class="pl-c1">None</span>:
<span class="pl-en">super</span>().<span class="pl-c1">__init__</span>(<span class="pl-s1">x</span><span class="pl-c1">=</span><span class="pl-s1">x</span>, <span class="pl-s1">y</span><span class="pl-c1">=</span><span class="pl-s1">y</span>, <span class="pl-s1">z</span><span class="pl-c1">=</span><span class="pl-s1">z</span>)
<span class="pl-en">@<span class="pl-s1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Line1</span>:
<span class="pl-s1">start</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">end</span>: <span class="pl-smi">Point</span>
<span class="pl-en">@<span class="pl-s1">pydantic</span>.<span class="pl-c1">dataclasses</span>.<span class="pl-c1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Line2</span>:
<span class="pl-s1">start</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">end</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">start1</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">end1</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">1</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">start2</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">end2</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">1</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">line1</span> <span class="pl-c1">=</span> <span class="pl-en">Line1</span>(<span class="pl-s1">start1</span>, <span class="pl-s1">end1</span>)
<span class="pl-s1">line1</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">line1</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">start1</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-s1">line2</span> <span class="pl-c1">=</span> <span class="pl-en">Line2</span>(<span class="pl-s1">start2</span>, <span class="pl-s1">end2</span>)
<span class="pl-s1">line2</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">line2</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">start2</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span></pre></div>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import pydantic
from dataclasses import dataclass
from pydantic import BaseModel
&quot;&quot;&quot;When using dataclass as base class for Point, changes ARE forwarded to Point&quot;&quot;&quot;
@pydantic.dataclasses.dataclass
class Point:
x: float
y: float
z: float
@dataclass
class Line1:
start: Point
end: Point
@pydantic.dataclasses.dataclass
class Line2:
start: Point
end: Point
start1 = Point(0, 0, 0)
end1 = Point(1, 0, 0)
start2 = Point(0, 0, 0)
end2 = Point(1, 0, 0)
line1 = Line1(start1, end1)
line1.start.x += 1
assert line1.start.x == 1
assert start1.x == 1
line2 = Line2(start2, end2)
line2.start.x += 1
assert line2.start.x == 1
assert start2.x == 1"><pre class="notranslate"><span class="pl-k">import</span> <span class="pl-s1">pydantic</span>
<span class="pl-k">from</span> <span class="pl-s1">dataclasses</span> <span class="pl-k">import</span> <span class="pl-s1">dataclass</span>
<span class="pl-k">from</span> <span class="pl-s1">pydantic</span> <span class="pl-k">import</span> <span class="pl-v">BaseModel</span>
<span class="pl-s">"""When using dataclass as base class for Point, changes ARE forwarded to Point"""</span>
<span class="pl-en">@<span class="pl-s1">pydantic</span>.<span class="pl-c1">dataclasses</span>.<span class="pl-c1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Point</span>:
<span class="pl-s1">x</span>: <span class="pl-smi">float</span>
<span class="pl-s1">y</span>: <span class="pl-smi">float</span>
<span class="pl-s1">z</span>: <span class="pl-smi">float</span>
<span class="pl-en">@<span class="pl-s1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Line1</span>:
<span class="pl-s1">start</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">end</span>: <span class="pl-smi">Point</span>
<span class="pl-en">@<span class="pl-s1">pydantic</span>.<span class="pl-c1">dataclasses</span>.<span class="pl-c1">dataclass</span></span>
<span class="pl-k">class</span> <span class="pl-v">Line2</span>:
<span class="pl-s1">start</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">end</span>: <span class="pl-smi">Point</span>
<span class="pl-s1">start1</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">end1</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">1</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">start2</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">0</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">end2</span> <span class="pl-c1">=</span> <span class="pl-en">Point</span>(<span class="pl-c1">1</span>, <span class="pl-c1">0</span>, <span class="pl-c1">0</span>)
<span class="pl-s1">line1</span> <span class="pl-c1">=</span> <span class="pl-en">Line1</span>(<span class="pl-s1">start1</span>, <span class="pl-s1">end1</span>)
<span class="pl-s1">line1</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">line1</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">start1</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-s1">line2</span> <span class="pl-c1">=</span> <span class="pl-en">Line2</span>(<span class="pl-s1">start2</span>, <span class="pl-s1">end2</span>)
<span class="pl-s1">line2</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">+=</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">line2</span>.<span class="pl-c1">start</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span>
<span class="pl-k">assert</span> <span class="pl-s1">start2</span>.<span class="pl-c1">x</span> <span class="pl-c1">==</span> <span class="pl-c1">1</span></pre></div>
<p dir="auto">I was just wondering:</p>
<ol dir="auto">
<li>if this nuanced difference in behaviour is intentional, and where I could find this in the doc</li>
<li>How can I make a BaseModel behave like the data class (i.e. make code block 1 run).</li>
</ol>
<p dir="auto">Thanks guys. Cheers Β πΊ</p>
upvoteCount:1
answerCount:1
acceptedAnswer:
type:Answer
text:<p dir="auto">Hi <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/theRealSuperMario/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/theRealSuperMario">@theRealSuperMario</a><br>
Have you checked <a href="https://pydantic-docs.helpmanual.io/usage/model_config/#change-behaviour-globally" rel="nofollow"><code class="notranslate">Config.copy_on_model_validation</code></a> ? :)</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Point(BaseModel):
x: float
y: float
z: float
def __init__(self, x, y, z) -&gt; None:
super().__init__(x=x, y=y, z=z)
class Config:
copy_on_model_validation = False"><pre class="notranslate"><span class="pl-k">class</span> <span class="pl-v">Point</span>(<span class="pl-v">BaseModel</span>):
<span class="pl-s1">x</span>: <span class="pl-smi">float</span>
<span class="pl-s1">y</span>: <span class="pl-smi">float</span>
<span class="pl-s1">z</span>: <span class="pl-smi">float</span>
<span class="pl-k">def</span> <span class="pl-en">__init__</span>(<span class="pl-s1">self</span>, <span class="pl-s1">x</span>, <span class="pl-s1">y</span>, <span class="pl-s1">z</span>) <span class="pl-c1">-&gt;</span> <span class="pl-c1">None</span>:
<span class="pl-en">super</span>().<span class="pl-c1">__init__</span>(<span class="pl-s1">x</span><span class="pl-c1">=</span><span class="pl-s1">x</span>, <span class="pl-s1">y</span><span class="pl-c1">=</span><span class="pl-s1">y</span>, <span class="pl-s1">z</span><span class="pl-c1">=</span><span class="pl-s1">z</span>)
<span class="pl-k">class</span> <span class="pl-v">Config</span>:
<span class="pl-s1">copy_on_model_validation</span> <span class="pl-c1">=</span> <span class="pl-c1">False</span></pre></div>
<p dir="auto">Hope it helps!</p>
upvoteCount:1
url:https://github.com/pydantic/pydantic/discussions/2929#discussioncomment-888698
Answer:
text:<p dir="auto">Hi <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/theRealSuperMario/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/theRealSuperMario">@theRealSuperMario</a><br>
Have you checked <a href="https://pydantic-docs.helpmanual.io/usage/model_config/#change-behaviour-globally" rel="nofollow"><code class="notranslate">Config.copy_on_model_validation</code></a> ? :)</p>
<div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class Point(BaseModel):
x: float
y: float
z: float
def __init__(self, x, y, z) -&gt; None:
super().__init__(x=x, y=y, z=z)
class Config:
copy_on_model_validation = False"><pre class="notranslate"><span class="pl-k">class</span> <span class="pl-v">Point</span>(<span class="pl-v">BaseModel</span>):
<span class="pl-s1">x</span>: <span class="pl-smi">float</span>
<span class="pl-s1">y</span>: <span class="pl-smi">float</span>
<span class="pl-s1">z</span>: <span class="pl-smi">float</span>
<span class="pl-k">def</span> <span class="pl-en">__init__</span>(<span class="pl-s1">self</span>, <span class="pl-s1">x</span>, <span class="pl-s1">y</span>, <span class="pl-s1">z</span>) <span class="pl-c1">-&gt;</span> <span class="pl-c1">None</span>:
<span class="pl-en">super</span>().<span class="pl-c1">__init__</span>(<span class="pl-s1">x</span><span class="pl-c1">=</span><span class="pl-s1">x</span>, <span class="pl-s1">y</span><span class="pl-c1">=</span><span class="pl-s1">y</span>, <span class="pl-s1">z</span><span class="pl-c1">=</span><span class="pl-s1">z</span>)
<span class="pl-k">class</span> <span class="pl-v">Config</span>:
<span class="pl-s1">copy_on_model_validation</span> <span class="pl-c1">=</span> <span class="pl-c1">False</span></pre></div>
<p dir="auto">Hope it helps!</p>
upvoteCount:1
url:https://github.com/pydantic/pydantic/discussions/2929#discussioncomment-888698
External Links {π}(4)
- See how much https://github.blog makes per month
- How much revenue does https://user-images.githubusercontent.com/6517465/122576196-b73ba580-d051-11eb-91d5-0181cf333704.png generate?
- Earnings of https://pydantic-docs.helpmanual.io/usage/model_config/#change-behaviour-globally
- https://www.githubstatus.com/'s revenue stream
Analytics and Tracking {π}
- Site Verification - Google
Libraries {π}
- Clipboard.js
- D3.js
Emails and Hosting {βοΈ}
Mail Servers:
- aspmx.l.google.com
- alt1.aspmx.l.google.com
- alt2.aspmx.l.google.com
- alt3.aspmx.l.google.com
- alt4.aspmx.l.google.com
Name Servers:
- dns1.p08.nsone.net
- dns2.p08.nsone.net
- dns3.p08.nsone.net
- dns4.p08.nsone.net
- ns-1283.awsdns-32.org
- ns-1707.awsdns-21.co.uk
- ns-421.awsdns-52.com
- ns-520.awsdns-01.net