I prefer HN for higher quality discussions. When I say posts which are pure political flame wars I (and many others) flag the post. Reddit is full of low information discussions. There's no need to also duplicate those posts here.
Everything is not political, and this statement itself is flamebait. Take a look at posts on the current homepage. Most are pure tech with no politics. Some are political with a tech angle but not flame wars.
Politics is defined as the way a system of multiple agents (typically humans) with conflicting goals, resolves to one outcome. That's pretty much everything. Almost all of economics, for example, is politics. API design is politics. UI design is politics. Putting /active behind a footer link is politics. Everything any government does is politics (or the government wouldn't have to do it). Every dispute is politics. There are a few things that are not politics, such as the colour of the sky, but almost everything humans make involves politics. The number of spokes in a wheel is politics, since the manufacturer wants as few as they can get away with. All news relates to politics.
I do the same thing. My PC is hooked up via HDMI to a receiver which goes to the TV via HDMI. I use VNC on my phone to remote control it. It works well. The phone’s touch screen functions as a mouse and you can pull up the phone’s on screen keyboard to type. My wife is extremely non technical and does fine with it. Usually we just use the browser to watch ad-blocked YouTube or unofficial sports streams.
> Some states don't enforce it, but you are breaking federal law when you smoke it.
No states enforce federal law, nor should they. To legalize weed, those state removed or deactivated state laws also on the books about marijuana production, distribution and consumption.
Millions of illegal aliens have entered the US under Biden. They're not all hanging at the border. Of course CBP needs to go everywhere in the US to remove all of them.
The far left always portrays the democrats as being too far left, even though both parties have moved to the left.
In 2000, no country in the world accepted gay marriage, up until 2013 gay marriage was banned in California because the Californians elected to do so (it was overruled federally against the wishes of the Californians).
In 2025, even a majority of Republicans (by some polls) support gay marriage. The far left always moves the goal posts. Once they legalized gay marriage, they considered it the norm instead of a wild idea that Republicans should fight to remove.
That's why you see the rise of Christian nationalism. Many consider the average Republican to be too far left (similar to how leftists consider Democrats to be too far right).
Personally, I'm for the Matrix opinion. In the Matrix, the future humans live in a simulated 1999 because it was considered the peak of human civilization. Socially, it was.
The goal of the far left has always been equality. It's the same goal that legalized interracial marriage.
> That's why you see the rise of Christian nationalism
We've always had an issue with Christian Nationalism in the US, and they use any excuse they can to push their agenda. If it's not gay marriage it's immigration, or trans rights, or whatever other wedge issue they can create a moral panic over.
It's vital to remember that nationalist goals are absolute, but they will lie about it. They say they just want to protect women's sports to get their foot in the door, and then they're banning gender affirming care and looking to re-criminalize gay marriage. There's no reason to compromise with nationalists.
I'm always surprised by how arrogant and unaware Python developers are. JavaScript/C++/etc developers are quite honest about the flaws in their language. Python developers will stare a horrible flaw in their language and say "I see nothing... BTW JS sucks so hard.".
Let me give you just one example of Python's stupid implementation of inheritance.
In Python you can initialize a class with a constructor that's not even in the inheritance chain (sorry, inheritance tree because Python developers think multiple inheritance is a good idea).
class A:
def __init__(self):
self.prop = 1
class B:
def __init__(self):
self.prop = 2
class C(A):
def __init__(self):
B.__init__(self)
c = C()
print(c.prop) # 2, no problem boss
And before you say "but no one does that", no, I've see that myself. Imagine you have a class that inherits from SteelMan but calls StealMan in it's constructor and Python's like "looks good to me".
I've seen horrors you people can't imagine.
* I've seen superclass constructors called multiple times.
* I've seen constructors called out of order.
* I've seen intentional skipping of constructors (with comments saying "we have to do this because blah blah blah)
* I've seen intentional skipping of your parent's constructor and instead calling your grandparent's constructor.
* And worst of all, calling constructors which aren't even in your inheritance chain.
And before you say "but that's just a dumb thing to do", that's the exact criticism of JS/C++. If you don't use any of the footguns of JS/C++, then they're flawless too.
Python developers would say "Hurr durr, did you know that if you add a object and an array in JS you get a boolean?", completely ignoring that that's a dumb thing to do, but Python developers will call superclass constructors that don't even belong to them and think nothing of it.
------------------------------
Oh, bonus point. I've see people creating a second constructor by calling `object.__new__(C)` instead of `C()` to avoid calling `C.__init__`. I didn't even know it was possible to construct an object while skipping its constructor, but dumb people know this and they use it.
Yes, instead of putting an if condition in the constructor Python developers in the wild, people who walk among us, who put their pants on one leg at a time like the rest of us, will call `object.__new__(C)` to construct a `C` object.
> In Python you can initialize a class with a constructor that's not even in the inheritance chain
No, you can't. Or, at least, if you can, that’s not what you’ve shown. You’ve shown calling the initializer of an unrelated class as a cross-applied method within the initializer. Initializers and constructors are different things.
> Oh, bonus point. I've see people creating a second constructor by calling `object.__new__(C)` instead of `C()` to avoid calling `C.__init__`.
Knowing that there are two constructors that exist for normal, non-native, Python classes, and that the basic constructoe Class.__new__, and that the constructor Class() itself calls Class.__new__() and then, if Class.__new__() returns an instance i of Class, also calls Class.__init__(i) before returning i, is pretty basic Python knowledge.
> I didn't even know it was possible to construct an object while skipping its constructor, but dumb people know this and they use it.
I wouldn’t use the term “dumb people” to distinguish those who—unlike you, apparently—understand the normal Python constructors and the difference between a constructor and an initializer.
> Knowing that there are two constructors that exist for normal, non-native, Python classes, and that the basic constructoe Class.__new__, and that the constructor Class() itself calls Class.__new__() and then, if Class.__new__() returns an instance i of Class, also calls Class.__init__(i) before returning i, is pretty basic Python knowledge.
I disagree that this is basic knowledge. In python a callable is an object whose type has a __call__() method. So when we see Class() its just a syntax proxy for Metaclass.__call__(Class). That's the true (first of three?) constructor, the one then calling instance = Class.__new__(cls), and soon after Class.__init__(instance), to finally return instance.
> Knowing that there are two constructors that exist for normal, non-native, Python classes, and that the basic constructoe Class.__new__, and that the constructor Class() itself calls Class.__new__() and then, if Class.__new__() returns an instance i of Class, also calls Class.__init__(i) before returning i, is pretty basic Python knowledge.
I didn't know most of that, and I've performed in a nightclub in Python, maintained a CSP networking stack in Python, presented a talk at a Python conference, implemented Python extensions with both C and cffi, and edited the Weekly Python-URL!
1. Your first example is very much expected, so I don't know what's wrong here.
2. Your examples / post in general seems to be "people can break semantics and get to the internals just to do anything" which I agree is bad, but python works of the principle of "we're all consenting adults" and just because you can, doesn't mean you should.
I definitely don't consent to your code, and I wouldn't allow it to be merged in main.
If you or your team members have code like this, and it's regularly getting pushed into main, I think the issue is that you don't have safeguards for design or architecture
The difference with JavaScript "hurr durr add object and array" - is that it is not an architectural thing. That is a runtime / language semantics thing. One would be right to complain about that
> The difference with JavaScript "hurr durr add object and array" - is that it is not an architectural thing. That is a runtime / language semantics thing. One would be right to complain about that
Exactly. One is something in plain sight in front of ones eyes, and the other one can be well hidden, not easy to spot.
Oh I've seen one team constructing an object while skipping the constructor for a class owned by another team. The second team responded by rewriting the class in C. It turns out you cannot call `object.__new__` if the class is written in native code. At least Python doesn't allow you to mess around when memory safety is at stake.
For what it's worth, pyright highlights the problem in your first example:
t.py:11:20 - error: Argument of type "Self@C" cannot be assigned to parameter "self" of type "B" in function "__init__"
"C*" is not assignable to "B" (reportArgumentType)
1 error, 0 warnings, 0 information
ty and pyrefly give similar results. Unfortunately, mypy doesn't see a problem by default; you need to enable strict mode.
I don't understand the problem with your first example. The __init__ method isn't special and B.__init__ is just a function. Your code boils down to:
def some_function(obj):
obj.prop = 2
class Foo:
def __init__(self):
some_function(self)
# or really just like
class Foo:
def __init__(self):
self.prop = 2
Which like, yeah of course that works. You can setattr on any object you please. Python's inheritance system ends up being sane in practice because it promises you nothing except method resolution and that's how it's used. Inheritance in Python is for code reuse.
Your examples genuinely haven't even scratched the surface of the weird stuff you can do when you take control of Python's machinery—self is just a convention, you can remove __init__ entirely, types are made up and the points don't matter. Foo() isn't even special it's just __call__ on the classes type and you can make that do anything.
With the assumptions typical of static class-based OO (but which may or may not apply in programs in Python), this naively seems like a type error, an even when it isn't it introduces a coupling where the class where the call is made likely depends on the internal implementation (not just the public interface) of the called class, which is...definitely an opportunity to introduce unexpected bugs easily.
I don't know why people are being to negative towards GP. (Maybe because he didn't argue his point?) It's well known that GDP is not a good measurement for common people.
You can have a rich elite and a high GDP, but that doesn't mean the common people are doing as well as the GDP suggests.
A good example of this is Ireland. It has a huge GDP. 129,132$ per capita. It's the 3rd richest country in the world if you look at it like that (Liechtenstein and Luxembourg are first and second).
But do you think the average Irishman actually makes 129,132$ per year? No. Ireland is a tax heaven and its artificially inflated by tax shenanigans from foreign multinationals.
There are other reasons why absolute GPD is bullshit. Even PPP GDP is a little bullshit.
> It's well known that GDP is not a good measurement for common people.
It has many flaws, but can you name a better one?
> that doesn't mean the common people are doing as well as the GDP suggests.
Nobody who understands GDP would say everyone is doing as well (or poorly) as GDP suggests. Some people do better, some worse.
But people in places with higher GDP reliably do better. Visit a poor or middle-income country; the difference is unmistakeable and this debate becomes absurd.
Inequality is a major problem in high-GDP countries; that doesn't mean GDP is meaningless.
> The Senate is fundamentally a ridiculous way of representing 350 million people
The Senate does not represent the people. The House of Representatives represents the people. The Senate represents the states. That's why there are two senators per state and the number of representatives depends on the population of the state.
It's so bizarre when American's don't understand their own democracy and a foreigner has to explain it to them.
The US founding fathers learned from history and designed the US democracy to be more like the Roman system. In Greece they had a more direct democracy. That led to mob mentality. The Romans split the powers between different bodies and people. There were two executives (consuls). There were two legislative powers: the senate and the plebeian council.
The system was set up with conflicting groups. When they agreed reforms were enacted, when they disagreed the country stays the same. This was not a bug, it was an intentional feature.
The US democratic system was inspired by this.
Senators are supposed to represent states. That's why they were appointed, not elected. Senators have only been elected from 1913 when the 17th amendment passed.
---
On a separate not, this is also why the US does not have direct elections. The elector system is designed to take into account states, not just people. If it didn't exist. Candidates would only campaign in the populous east and west coast.
> The House of Representatives represents the people.
The House of Representatives represented the people until 1929 and the Permanent Apportionment Act.
The reasoning campaigned on for this act? To protect low population states from high population ones.
The House represents the people more than the Senate, but it still provides proportionally more power per capita to lower population states than higher population ones.
Repeal the 17th, overwrite the PAA, and we're back to something more closely resembling what the founding fathers intended. In the mean time, with the House having departed from their intent, it's just as reasonable for people to suggest the Senate depart from their intent too.
Everything is not political, and this statement itself is flamebait. Take a look at posts on the current homepage. Most are pure tech with no politics. Some are political with a tech angle but not flame wars.
reply