[Python] 底線, name_mangling與private member

python並沒有所謂的private
但可以在member的前面加上一個底線 當作一個軟性的private
告訴其他人這個member不應讓其他人取用或修改 以達到安全性

我們也可以在member前面加上雙底線 這樣會產生name mangling的效果
但這樣也不能完全達到禁止存取

一般的情況下應該使用單底線來告知使用者即可(from fluent python ch9)

閱讀更多

[Python] default argument


def show_name(name = "no name"):
    print(name)

show_name("John")
#John
show_name()
#no name

只要在參數後面加個等於可以設定參數的預設值
但要小心不要使用可變(mutable)的容器當作預設值, ex: list, dict, set
不然會出現下面的問題

閱讀更多

[python] defaultdic, __call__

case1:
有時候我們會希望在dictionary中遞增value
但往往需要重複檢查key值是否存在並設定value為empty list, empty set或為0
這種情況使用setdefault或是sefaultdict就是一個好選擇

case2:
有時我們會希望function在執行時同時記錄一些狀態值
使用__call__來建立一個可以呼叫的物件

閱讀更多

醫師國考成績單補發及OSCE成績單補發

這篇ptt 醫學生版的文章可以參考:
https://www.ptt.cc/bbs/medstudent/M.1386212080.A.2B2.html

目前(2018/1)負責單位已經變成專技考試司第四科
聯絡電話要改為02-2236-9188 分機3708

建議直接寄e-mail過去申請即可
地址是moexpro4@mail.moex.gov.tw
然後需要填應考人應試成績補發申請表填好後e-mail申請即可
雖然對方說要3~5個工作天,但實際上我隔天就收到了

又OSCE成績單補發應直接找當初考試的醫院
除非是要申請osce證書才要找台灣醫學教育學會

[讀書心得] 鳳凰專案-看IT部門如何讓公司從谷底翻身的傳奇故事

FullSizeRender-2

醜話說在前這本書的翻譯品質並不好,一來可能是譯者的翻譯問題二來可能是本書原文作者用字方式較特別。我本人並沒有看過原文,但看過原文的朋友曾表示這本書的英文並不好理解。

撇開翻譯品質的問題,這本書是以小說方式解譯devops,故當成小說來閱讀應該不會有太大問題。因為我只有在硬體系統廠工作的經驗,閱讀時對於這本書常碰到的「deploy」問題較沒有概念,一些專有名詞如ITIL, ITSM也就略過不研究。

這本書以「第一人稱」來描寫比爾這個中階經理在CIO被FIRE後被拉上公司技術總管理人,負責理管全公司約100名工程師。書中的公司雖為一家汽車零件公司,但有許多複雜的IT系統負責生產管理、庫存、零售、薪資、財務等功能。

閱讀更多

[Python][C++] static method and inheritance

[code language=”cpp”]
#include <iostream>

using namespace std;

class Parent {
public:
void foo() {
cout << "foo of parent" << endl;
}
static void static_foo() {
cout << "static_foo of parent" << endl;
}
};

class Child : public Parent {
public:
void foo() {
cout << "foo of child" << endl;
}
static void static_foo() {
cout << "static_foo of child" << endl;
}
};

class DummyChild : public Parent {};

void demo() {
Parent parent;
Child child;
DummyChild dummyChild;

parent.foo(); //foo of parent
Parent::static_foo(); //static_foo of parent

child.foo(); //foo of child
Child::static_foo(); //static_foo of child

dummyChild.foo(); //foo of parent
DummyChild::static_foo(); //static_foo of parent

Parent *parentPtr;
Child *childPtr;

parentPtr = &child;
parentPtr->foo(); //foo of parent
//在一般的情況下 因為cpp是靜態語言 預設只會去找這個pointer class所屬的member function

childPtr = &child;
childPtr->foo(); //foo of child
}
[/code]

[code language=”cpp”]
class VirtualParent {
public:
//member function前面加個virtual就變成virtual function
//後面再加上 = 0;就是pure virtual function
virtual void foo() = 0;
virtual void foo2() {} //實作virtual function不是良好設計 但仍可編譯
};

class NonVirtualChild : public VirtualParent {
public:
//child必須實作pure virtual function
void foo() {
cout << "non virtual child" << endl;
}
//若parental有實作virtual function, child建議要overwrite
//但非強制overwrite
void foo2() {}
};

void demo1() {
//含有pure vitual function的class無法生成instance
//此class又稱abstract class(c++術語)或是interface(抽象講法)
//VirtualParent p;

NonVirtualChild c;
c.foo(); //non virtual child
}

class ConcreteParent {
public:
virtual void foo() {
cout << "concrete parent" << endl;
}
};

class ConcreteChild : public ConcreteParent {
public:
virtual void foo() {
cout << "concrete child" << endl;
}
};

void demo2() {
ConcreteParent* p = new ConcreteChild();
p->foo(); //concreate child;
//若呼叫的是virtual function, pointer會去table找出真正的member function
delete p;
}

int main() {
demo();
demo1();
demo2();
}

[/code]

[code language=”python”]
#Python
class Parent:
variable_foo = "variable_foo" #也是class variable
class_variable_foo = "class_variable_foo"

def __init__(self):
self.variable_foo = "init_foo" #object variable

def foo(self):
print("foo of parent, variable = {}, {}".format(self.variable_foo, self.class_variable_foo))

@staticmethod
def static_foo(*arg):
print("static_foo of parent: arg = {}".format(arg))

@classmethod
def class_foo(cls):
print("class_foo of parent, variable = {}, {}".format(cls.variable_foo, cls.class_variable_foo))

class Child(Parent):
variable_foo = "child_variable_foo" #也是class variable

def __init__(self):
self.variable_foo = "init_child_foo" #object variable

def foo(self):
print("foo of child, variable = {}, {}".format(self.variable_foo, self.class_variable_foo))

@staticmethod
def static_foo(*arg):
print("static_foo of child: arg = {}".format(arg))

@classmethod
def class_foo(cls):
print("class_foo of child, variable = {}, {}".format(cls.variable_foo, cls.class_variable_foo))

class DummyChild(Parent):
pass

parent = Parent()
parent.foo() # foo of parent, variable = init_foo, class_variable_foo
#Python會先去找object的variable 找不到時才會去找class的variable

Parent.class_foo() # class_foo of parent, variable = variable_foo, class_variable_foo
Parent.variable_foo = "changeable"
Parent.class_foo() # class_foo of parent, variable = changeable, class_variable_foo
#在Python裡面 class也是一個object 故在執行期改變class變數是OK的
#在C++ class不是object而是一個namespace 故呼叫class static function要用"::" 而非"."

Parent.static_foo() # static_foo of parent: arg = ()
Parent.static_foo("argument1", "arguments2") # static_foo of parent: arg = (‘argument1’, ‘arguments2’)
#在Python裡面 static method是沒辦法access class的attribute
#故可了解 Python的class method其實比較像C++的class static method

child = Child()
child.foo() # foo of child, variable = init_child_foo, class_variable_foo
child.class_foo() # class_foo of child, variable = child_variable_foo, class_variable_foo
child.static_foo() # static_foo of child: arg = ()

dummy = DummyChild()
dummy.foo() # foo of parent, variable = init_foo, class_variable_foo
DummyChild.class_foo() # class_foo of parent, variable = changeable, class_variable_foo
DummyChild.static_foo() # static_foo of parent: arg = ()
[/code]

[讀書心得] 原來有錢人都這麼做 – The Millionaire Next Door

FullSizeRender-1

書名:原來有錢人都這麼做

作者:湯瑪斯.史丹利(Thomas J. Stanley) 威廉.丹柯(William D. Danko)

譯者:凌瑋

ISBM:978-986-93764-1-9

這本書的中心思想很簡單,就是「儲蓄」。作者認為美國許多高收入份子都過度消費,造成資產不足。作者統計了許多有錢人—-依照他定義是資產在100萬美元以上的家庭,發現大部份有錢人都很節儉。前半本書作者舉出了許多統計資料來幫讀者描繪出大部份有錢人消費方式。後半本書則是講述富二代問題,什麼樣父母容易養出敗家子—-那些愛花錢、且會拿錢資助子女的父母。

作者舉了一個有趣的公式來分別高收入的窮人(作者稱超遜理財族)與真正的有錢人(超優理財族)

淨資產 = 資產-負債 > 年齡÷10×年收入

    但我覺得這個公式非常差,假設一個30歲年收入50萬剛工作三年的年輕人,他要有150萬才能稱為超優理財族,必須工作三年都不吃不喝才能達到。而一個60歲年收100萬的屆退人士只要600萬就可算是有錢人,但這個錢買一棟自住的房子就沒剩多少,不夠退休使用。故我提出一個新公式來改進:

淨資產 > 年齡×工作年數÷100×年收入

     也就是說上述的年輕人只要有45萬淨資產就能算是超優理財族,雖然看起來不多但他得先把收入的30%存下來才能辦到,而那位屆退人士則需要1800萬淨資產才算是有錢人。

閱讀更多

婦產科筆記

2012 於國泰醫院婦產科

曾被考過兩次以上之題目: TOA, ovary cancer, breech, endometrial cancer, ovarian tumor良惡判斷, GBS, cancer分期, tumor marker, prolong labor.

  Site 別名 內含物 備註
Board ligament 子宮附近片狀 其實就是前後peritoneum
Round ligament 子宮到大陰唇 Ligamentum teres Sampson’s artery在其內 TAH要打斷此ligament
Cardinal ligament

(主韌帶)

子宮下(uterine cercix vagina)往pelvic wall Transverse ligament uterine artery 通過, broke造成Uterocele 最重要支持子宮的ligament
Infundibular pelvic ligament 輸卵管往上吊 Suspensory ligament Contain ovarian artery Salpingo oophorectomy打斷
Ovarian ligament 子宮到卵巢 Proper ligament ATH+BSO切
Vesicouterine ligament 子宮到膀胱 支持子宮重要的ligament
Uterosacral ligament: 子宮到sacrum Uterocele broke之ligment 在cervix與cardinal ligament相連
Vesicouterine pouch 子宮與膀胱間
Rectouterine pouch Uterus和rectum間 Cul-de-sac of Douglas

閱讀更多