本文主要针对那些熟悉 OOP,但还不熟悉 Python 的同学。为了让大伙儿有一个直观的认识,俺会拿 C++/Java 来进行语法上的对比。(这俩语言的名气够大,且号称支持 OO,也算有些可比性)
强调一下:本文虽然拿了某些语言来作对比,但丝毫没有贬低这些语言的意思,请这些语言的粉丝们,不要对号入座 :)
★抽象(Abstraction)
但凡介绍 OOP,自然会提到抽象。因为抽象,是 OO 的第一要素,也是其它要素的基础。而提到抽象,又不免提到对象(Object)。所以,俺首先来聊一下,Python 语言是如何体现“对象”这个思想的。
◇Python的对象
如果要问俺,什么是 Python 中的对象,还真不好下一个严密又通俗易懂的定义。为了敷衍大伙儿,俺只好用一句话来概括,那就是 Python 语言中,【一切皆对象】。这句话该如何理解捏?简单来说,就是你在 Python 语言中涉及到的各种东东,都是“对象”。比如,函数是对象、各种数值(比如整数值、浮点数值、布尔值)是对象、模块(类似于 Java 的 package)是对象、None(类似于 Java 的空引用 null、C++ 的空指针 NULL)也是对象、甚至连类(class)也是对象......
对比一下 C++ 和 Java 的语法:只有【类的实例】才能算得上是对象。这2个语言的基本类型(比如“int、char、float”等)不是对象,至于函数,就更算不上了。
既然是一切皆对象,俺有必要稍微总结一下,Python 对象的共性,否则初学 Python 的同学还是会一头雾水。
◇对象的属性
首先,所有的 Python 的对象,都具有若干个属性。你可以通过内置的 dir() 函数进行反射,从而了解到某个对象分别都包含哪些属性。熟悉 Java 的同学,应该明白啥是“反射”。光懂 C/C++ 的同学,如果理解上有困难,可以先参考“维基百科的解释”。
另外,Python 还提供了若干内置的函数,用于在【运行时】操作指定对象的属性。具体如下:
hasattr(obj, name) #判断obj对象是否具有名为name的属性 setattr(obj, name, value) #设置obj对象的名为name的属性值为value getattr(obj, name) #获取obj对象的名为name的属性值 delattr(obj, name) #删除obj对象的名为name的属性
◇对象的类型
所有的 Python 对象,都可以通过内置的 type() 函数获取该对象的类型。这实际上就是 Python 的 RTTI 机制的体现。懂 C++ 的同学,可以回忆一下 C++ 的 typeid 关键字;懂 Java 的同学,可以想一想 Java 的 instanceof 关键字。
◇对象的标示
所有的 Python 对象,都可以通过内置的 id() 函数获取该对象的【唯一】标示。而且当一个对象创建之后,这个唯一标示就会始终保持不变。对于学过 C/C++ 的同学,不妨把这个“唯一标示”想象成该对象在内存的地址。这或许有助于你的理解 :)
Python 对象还有其它一些共性,考虑到本文的扫盲性质,就不再费口水了。有兴趣的同学,可以自己找些入门书研读一番。
◇【一切皆对象】的好处?
可能有同学会问,“一切皆对象”有啥好处捏?俺窃以为:当一切皆为对象,就可以把很多概念、操作、惯用手法统一起来,在语法层面体现出美感。
下面俺举几个例子,并拿 Java 来对比一下。
在 Java 里面,由于基本类型不是继承自 Object 类,引出不少麻烦。当初 Java 它爹刚开始设计容器类(比如 Vector、ArrayList ...)的时候,颇费了一番功夫。因为容器里面放置的东东必须是 Object,为了让容器能适应基本类型,只好给每一种基本类型分别对应一个派生自 Object 的包装类(Integer 类对应 int、Float 类对应 float ...);后来又平添了自动装箱/拆箱的概念;搞来稿去,产生了 N 多复杂性。
而 Python 就没有这方面的困扰。
再拿刚才提及的“反射”来说事儿。虽然 Java 语言支持对象的反射,但是 Java 的 package 不是 Object,所以也就无法对 package 进行反射。反观 Python,任何一个 module(相当于 Java 的 package)import 之后,都可以直接通过前面提到的 dir() 函数进行反射,得知该 module 包含了哪些东东。仅仅需要2行代码:
import xxx dir(xxx)
★封装(Encapsulation)
为了避免歧义,首先要明确一下:什么是“封装”?为了叙述方便,俺把【OOP 的封装】,分为“狭义”和“广义”两种。(关于“封装”的深入讨论,可以参见“另一篇博文”)
◇广义封装
OOP 很强调以数据为中心。所以 OOP 的广义封装,就是把数据和操作数据的行为,打包到一起。比如 C++/Java 里的 class,可以同时包含数据成员和函数成员,就算是满足“广义的封装”了。对于 Python 而言,其 class 关键字类似于 C++ 和 Java,也已经具有“广义的封装性”了。
◇狭义封装
而 OOP 的狭义封装,则更进一步,增加了信息隐藏(Information Hiding)。比如 C++ 和 Java 的“public、protected、private”等关键字,就是通过访问控制来达到信息隐藏的效果。Python 虽然没有针对访问控制的关键字来修饰类成员,但是 Python 采用了另外一套机制——根据命名来约定。在 Python 的对象中,如果某个属性以双下划线开头来命名(比如
__name
),就能起到类似于 C++/Java 的 private
关键字的效果。◇对访问控制的偏见
俺曾经在某技术论坛看到有人质疑 Python 的访问控制机制,说 Python 的私有属性,可以通过反射机制绕过,因此形同虚设。在此,俺想举 C++ 和 Java 来进行反驳。
在 Java 中,同样可以通过反射机制,来访问类的私有成员。至于 C++,得益于指针的强大,只要能访问某个对象(的 this 指针),通过计算该对象成员变量在内存中的偏移,一样可轻易对私有成员变量进行读写。虽然这么干挺变态滴,但技术上是可行滴。
★继承(Inheritance)
紧接着,咱再来说一下继承的话题。
◇Python 的继承
Python 没有像 Java 那样,区分出“类继承”(OO 的术语中也叫“实现继承”)和“接口继承”;也没有像 C++ 那样,区分出“公有继承、私有继承、保护继承”这么花哨的玩意儿。Python 就只有一种继承方式。
◇继承的语法
Python 的继承语法,相比 C++/Java 而言,更加简洁。比如子类 Child 需要继承父类 Parent,代码只需如下:
class Child(Parent) : # xxxx
如果是多继承,代码大同小异:
class Child(Parent1, Parent2, Parent3) : # xxxx
假如你想知道某个类有哪些父类(基类),只需要通过 Child.__bases__ 便可知晓。
◇继承的动态性
其实上一个帖子已经介绍了动态改变继承关系的例子。但是考虑到上一个帖子年代久远(距本文将近1年),想必很多同学没看过或者看过又忘了。俺不妨再啰嗦一下:作为一种动态语言,Python 可以在【运行时】修改类的继承关系。这个特性比较酷,是 C++/Java 所望尘莫及滴。请看下面的例子:
class Parent1 : def dump(self) : print("parent1") class Parent2 : def dump(self) : print("parent2") class Child : def dump(self) : print("child") print(Child.__bases__) Child.__bases__ += (Parent1, Parent2) # 动态追加了2个父类 print(Child.__bases__) # 此处打印出的父类信息中,已经包含 Parent1、Parent2
★多态(Polymorphism)
至于 Python 的多态,和传统的 OO 语言差不多,似乎没有太多值得说道的地方。俺简单举个代码作例子。为了省打字,直接复用上述的3个类,并增加一个 test() 函数如下:
def test(obj) : obj.dump()
然后对 test() 函数分别传入不同的类型的对象,输出结果俺就无需多说了吧?
c = Child() test(c) # 打印出 child p1 = Parent1() test(p1) # 打印出 parent1
★结尾
今天的话题,主要是让不熟悉 Python 的网友,对 Python 在面向对象方面的特性,有一个粗浅、感性的认识。聊完了 OOP,下一个帖子会聊一下关于 FP(函数式编程)的话题。
回到本系列的目录
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始地址:
https://program-think.blogspot.com/2010/08/why-choose-python-3-oop.html
有人打算整理一下关于编程随想下落的线索吗?(从正反两个方面来举证)
好多怪事都是人为的,第一在搞邪术如祭鬼封神献祭打call,其次是搞种姓的事,
这帮东西用老外的名义来操控挑拨玩弄这个那个,这也是奇葩的,和叫东土人找阿三还是鬼子去表达册封封禅这皇帝是东土的皇帝一样奇葩, ......
ym蜀人都不愿放手的东西如屁眼套路,幼女,献祭,老单和最高神位是有原因的,很值得去研究的 ......
即使博主能活着出狱,若要看到他更新六四系列,那也是在天朝发生了民主化之后,共产党不再有能力镇压批评者之时。
就算哪天中国情报部门不经司法程序,直接把人暗杀了,我也不会觉得奇怪。
https://www.zaobao.com.sg/realtime/china/story20241226-5649612
https://www.youtube.com/watch?v=ozVq_04XMro
如果出现了自杀场景,多半是政府秘密下令处决,并伪装成了自杀。
来自Firsthack的评论
而且,二审的发改率(发回重审+改判)是一个考核政绩的指标,高层认为这个数字越低说明冤假错案越少,然后下面就越容易升官。 ......
原神UID:310221197410210025
互动热线: 13524626271 上海移动
学历: 硕士
生日: 19741021
身高: 165 ......
周欣身份证310105197106042383
户籍地址 :上海市闵行区吴中路429弄15号501室
同户人 :薛军,男,310106196903180414,1969年03月18日; ......
希望各大媒体都报道这几个名字:审判长周欣,审判员:凌莉、须梅华。
家属贝震颖推特号:Birds_b_r_32309
多谢分享“中药注射剂”等国产医疗行业的相关丑闻。
另外,关于疫情期间的乱象,俺整理了一篇:
《每周转载:白纸抗议年的“动态清零”灾难(网文14篇,多图)》
多年前不记得在哪篇博文的评论区和博主讨论叙利亚的命运,当时叙利亚的局势还未尘埃落定。可惜博主现在大牢内,看不到。
这次叙利亚的民主转型发生在俄国陷入战争的泥沼的背景下。 ......
这个是个邪术,第一个是给上面看(不知什么鬼),其次的就真的会指导目标去实际地去做这么些的犯罪邪恶,侵犯幼女的情节是经常频繁重复地出现地,和侵犯女性,还有就是生命 ......
估计到最高法院也没戏,可能会以9:0判决禁抖音。
欢迎提出不同观点。
你提到的是这二者之间的差异,俺也同意这些差异确实存在。
但是,俺要开始说但是了。从本文,咱们也可以讨论这二者之间的共性,至少包含以下方面: ......
玩邪术玩出个什么结果好歹给公开一下,拼命玩邪术还一声不吭,很危险的,要分享分享,劳资帮你们来研究研究
劳资相信这帮东西是能穿越时空的,现在是2019年的ZS,时空被改变穿越了。穿越时空的套路。这帮东西几千年都一个屌样,来几个十级地震都不会任何改变。 ......
现在的两党是争先比谁对华更强硬,已经通过的制裁法案不会松绑,已经加的关税也不会再降,否则就会被在野党骂成“通敌叛国”。
明年1月19日之前,抖音会被禁。
每天上网的好多人都在聊政治呢,难道你要把每一个聊政治的人都抓起来判刑?那也没用。因为年轻人越来越倾向于认为政治制度才是造成他们被困在他那个阶层的重要原因。 ......
这个博客对于政府的批评,大部分都是有理有据。你要是觉得哪里不对,可以反驳博主嘛。判7年是究竟有多心虚? ......
以色列做任何事,都是美国包容范围,和美国民意无关(甚至抗议都无效)。台湾今后也会差不多。
国会一旦提出新的关于台湾的法案,无论是军售,亦或是改善台湾的国际地位等等,都很容易造成近乎【全票通过】。 ......
然而,公报本身只是行政政府的声明,其效力不如法律。 ......
然而,现在的人们,对于不能证明是否为间谍的走线客,也不太宽容。估计人们会支持一律用“有间谍嫌疑”之类的理由,实行一律驱逐的政策。 ......
但是,有些两党已经形成共识的事,其实是不受太大影响的。例如:把台湾武装成以色列。
所以我估计,中共在川普第2任期的前2年之内,就会对台湾动手。
因为这次GOP在众院优势实在太小了,稍微发生一点差错,钟摆效应会让民主党夺回之。
参议院不好说。如果连参议院也丢了,那川普后两年就可能成为跛脚总统,啥事都干不了。
不服者会选择:明着顺从,其实背地里跟共产党对着干。
众议院估计是个险胜。
上次共和党在众议院也是微弱优势,导致议长难产。
这次应该不会难产,因为有川普在,他只要在台上喊几句,就可以让任何一个人当议长,其它共和党议员不会阻挠。 ......
根据NBC新闻:
https://www.nbcnews.com/politics/immigration/trump-may-deport-hundreds-thousands-migrants-biden-allowed-legally-ent-rcna179357 ......
就是先用民调测量其它选举,比如某个地方议员的选举,然后和民调进行对比,看女性候选人是否严重吃亏,是否和民调严重不符。
如果发生该现象,那得出的差额数字,就是该地隐藏的“害羞的性别歧视者”的百分比。 ......
因为“害羞的川粉”等受访者不诚实回答问题的现象,仍然使得民调失真。
贺锦丽连普选票都输了。
你民主党输得这么惨,总不能反思为啥没去迎合那些“黑命贵零元购”之类的种族主义口号吧?反思搞种族平权搞得过头了?
......
美国出了个川贼东。抗战前没做到【攘外必先安内】,这下麻烦大了。
恭喜美国又创造了世界纪录。
估计是川普险胜。
因为大法官的任命是由总统和参议院共同决定,如果总统是川普,那他就会提名非常有争议的保守派大法官。
......
......
川普险胜29%
其它情况基本可以排除。
我的意见是把第13问算成川普+1,他不是国家英雄,但很多人粉川。
然后把第12问算成贺锦丽+1,因为川黑人数太多了,这些人的票会投给贺锦丽。
◇以【川普】为中心展开
◇极化现象
这个没变
......
有一天,我们或许能用类似的思路,找到这些人的把柄,从而有利于清算工作。
只不过在现在,我这种平民可能不够使用AI干这些事的资格。
围观的人多的时候,可以顺便大声质疑警察的做法有无法律依据,给警察造成压力。
即便不说话,而只是去围观,也能造成一点压力。而且围观的风险很低。 ......
我判断他们这些操作主要是为了吓唬人,比如登记这个操作,是为了方便以后搞大清洗时候用的(但概率很小,只有像文革、战争那种特殊时期才会用到)。不过只要敢反抗的人足够多,他们的策略就不会起到太多效果。 ......
对于本案中,已经违反了现有法律的人,比如越权的检察官颜蔚、枉法的董玮、须梅华等人,如果中共已经对其违法行为做出一次处罚,那肯定还不够。到清算的时候,还要【再算一次】,以迫害罪重新起诉之。 ......
防范清算的唯一办法,就是做事的时候要对得起自己的良心;不然的话,光靠威胁那些想要清算你们的人是没用滴。你们抓不完的。
上次一经施压,线索就出来了(当然,威慑的价值是表示反对意见)
至少“RXH屏幕截图”这条线索来得蹊跷
总之,阮晓寰这人是一定要救的。
无论什么办法。哪怕是需要付出1条人命代价的办法都可以提出,因为有人愿意付出这个代价(但前提是这个办法必须靠谱,必须要有效救得了人才行)。
(然而,我认为这个说法是令人难以相信的。)
如果不去尝试改判这条路,就没办法向贝震颖等人证明中国政府的邪恶(远超她的想象)。
另外,我猜测她对反共的人可能还是蛮反感的,比方说,我猜她会认为是反共的人把她丈夫阮晓寰害惨了。 ......
......
找三四到局子里等劳资,怎么不找三四直接来找劳资,又不会发生什么,要找什么来兜这个底 ......
否则,大人物会很高兴,因为他们只需要把责任推给小人物就行了。然后,这个案子就会被某些小人物重判。
反正是零责任嘛,他们不会抵制上级的不合理命令。相反,我们恰好需要小人物【消极抗命】。 ......
陈吉宁是否对一审有责任,这个不好说。毕竟时间太短了。
不过,二审判决的责任很好推定。如果陈吉宁手下的法官维持原判,那我们将来就要抓陈吉宁问罪,无论他将来逃到哪个国家。 ......
一审宣判日2023年2月10日,陈吉宁于2022年10月28日上任。
这期间有大约4个月的时间,陈吉宁作为一把手,有4个月的时间可以影响一审判决。 ......
至于继任的陈吉宁,看二审表现。
办事的小人物也有出庭作证的义务,证明他们背后的老大是幕后黑手,以便减轻自己的罪责。 ......
刚才查到一个,上海政法委书记诸葛宇杰,这个也应该加入该清算的名单。
诸葛宇杰应当是其中一个有能力影响判决的人,如果本案遭到重判,那此人将也应该成为重点追究责任的对象。官职越高,越值得追究。 ......
https://x.com/Suyutong/status/1654760377165438977
@Suyutong ......
新二审法官无需为须梅华法官被撤换之前所羁押的这段时间负责;至于多出来的刑期嘛,超出多少,负责多少。
所以,我建议新二审法官把这个案子改判到3年半以下。 ......
根据法案,总统有权把期限再延长90天。也就是延期到2025年4月
阮晓寰案被多次延期,最近一次是延期至今年12月底审结。 ......
那么,如果能促成一两个有代表性的人物获释(比如编程随想博客博主阮晓寰),那样的话也有改善形象的作用,最终会对抖音将来的法庭判决有好处。 ......
如果按“无罪推定”原则,要求别人先去证明算法推荐有鬼,才肯处罚抖音,就太晚了(比方说,有一天台海战争爆发,年轻人从抖音上看到的到处都是有利于中共、不利于台湾的信息。那美国就会吃亏,援台阻力增加)。 ......
消息源:https://fox59.com/indiana-news/sen-mike-braun-said-interracial-marriage-ruling-should-be-left-to-states/ ......
这些都是在清算之日不能忘记的名字。
引用博主的 原话 :
......
根據我在上海看守所被關押的經歷,陳品霖的待遇很大概率是真的。
我在兩次共計65天的關押期間,沒有任何一次放風的經歷,而可見的放風場(我沒用過)僅是另一個頭頂有小天窗的封閉房間。僅管我是被單獨關押,我也從隔壁監室聽到過關押人數太多、不得不側身睡覺或者睡在地板上的說法 ......
夏巢川 Rei Xia @karasu_ga_warau
⚪️‼️《烏魯木齊中路》被捕導演 #陳品霖 的律師袁茂在9月26日發微博稱,陳品霖在看守所中遭到不人道對待,包括擁擠的睡覺條件,以及一個月才放一次風。在他們前往住所檢察官處反應情況時,檢察官也不見蹤影。 ......
对于阮晓寰案,上海法院要是再不放人,将进一步影响大批年轻人对于中国政治制度的看法。你判他刑,等于向年轻人自证是独裁制度,是专门靠镇压知识分子吃饭的。 ......
这个法律通过后,共产党的成年直系亲属将无法入境,也不能进行某些资产交易。
我建议被制裁对象的家属,赶紧促成释放阮晓寰博主等良心犯。这是你们自救的一个办法。在乌克兰战争期间,俄国寡头就是用类似的办法换取自己免于制裁的。 ......
推文出处 @Birds_b_r_32309
#编程随想 #阮晓寰
这一个多月,张冬硕律师来上海阅卷、会见了阮晓寰多次。基于一审的种种问题,阮晓寰本人、张律师和莫律师都分别于9月初上书高院,要求二审 依法 公开 开庭审理! ......
贝女士现在不锁推了,希望大家都去关注声援
总之,【环境差】就容易引发【癌症】。
这就是为啥我们希望阮晓寰二审获得【轻判】、减刑;降低得癌症的概率。
虽然民主党对非法移民确实更加友善,不过从长远看,我建议走线客对民主党也要留个心眼,同时重视共和党里面支持非法移民的少数派。
......
你可以谷歌搜索“阮晓寰”,这就是博主的真名。不过,本案恰巧还没有审理结束,他妻子@Birds_b_r_32309 在推特X上发声,要求大家多声援它,向当局施压,以便争取二审减刑。 ......
因为最近海地人有恐慌情绪,所以新闻转述了这个海地人所说的6年前车窗玻璃被砸那件事。
1938年,合法定居在德国的犹太人社区的玻璃也被砸碎,史称“水晶之夜”。
想必不久之后,华川粉会要求戴徽章,以便证明自己是合法移民,或者所谓的“良民”;至于那些不肯用这个徽章证明自己是良民的黄皮肤的人,自然就是非法移民了。 ......
关于斯普林菲尔德(Springfield)海地人吃猫的这个谣言,简单聊聊吧。
事情是这样的,起因是一个叫Erika Lee的大妈在脸书上贴了一篇文章,说我邻居丢了自己的宠物猫,怀疑是海地难民偷的。这个帖子被加上了“海地非法移民偷猫偷狗吃,大家赶紧看好宠物”的标题一传,一下子就爆了。 ......
以为非法移民不能投票就好惹是吧?
等到民主党大赦非法移民,2000万非法移民入籍美国获得投票权,你MAGA党就别想再选了。 ......
川普和MAGA大肆散布俄亥俄州Springfield海地人偷当地人宠物吃的谣言,煽动选民对移民的恐惧,反倒是让人关注到这个小城其实是移民帮助建设美国的典范。当地制造业外移造成了经济退化,在海地大地震后大量美国接纳的合法海地移民在此工作,小城重燃经济希望。 ......
美国的非法移民(比如走线客)可以抓住这个机会,帮海地合法移民发声、谴责川普。
记住:帮别人就是帮自己。
因为贺锦丽一旦对同情巴勒斯坦的这一方做出任何承诺,就会失掉另一方的选票(以色列这一方的金主就会放弃民主党,转而去帮川普),最终结果就是川普上台。 ......
当然了,拜登几乎没人粉他,大家当初都是因为讨厌川普才投给他的。
在拜登退选后,大家又去支持贺锦丽,才使她的民调变高。