>>>
if' ':
...
print
'not false'
...
not false
>>>
if'':
...
print
'not false'
...
def
get(*agrs):
return
"global func abc"
defi
():pass
class
a(object):
__getattr__ = get
bound_func = i
deff1(self):
pass
a = a()
print a.bound_func
# >
a.i = i
print a.i
#
a.i = i
僅僅是將全域性函式i作為例項a的屬性。
而在類中定義類屬性bound_func = i
,類生成例項後會成為bound function
。
class
mainclass
(object):
# func = abc #: error name '***' is not defined
def__init__
(self):
self.func = abc
self.message = message
defabc
():pass
message = "this is a message"
a = mainclass()
print a.func
print a.message
是可以執行成功的,即使函式和變數定義在類下面,但是類還是能成功生成例項,並且把它們作為例項屬性。
不過如果不是放在例項的初始化特殊方法__init__
中,而是作為類變數,那麼會報熟悉的name '***' is not defined
。必須把函式和變數的定義放在類上面。
懶得深究!個人猜測,python是動態語言,執行時會自上而下掃瞄整個檔案。探測到類屬性的定義,變數的定義在類之下,便會找不到變數。但是__init__
為例項的構造方法,例項化類時才會呼叫,所以例項化的時候,python已經掃瞄過了整個檔案,故不會找不到變數。
SQL指令中一些特別值得注意的地方
sql基本指令要頻繁使用,要是理解錯了,將來工作一定會出現很大的麻煩。今天再重新梳理一下基本的sql語法 in 這個指令,我曾經發生過把它和python中的in搞混的錯誤。python中的in和sql中的between對應。in可以讓我們依照數個不連續的值的限制從資料 中抓取元素。between 在...
一些值得注意的演算法題 樹
遞迴方法 先遍歷當前節點,然後左子樹,然後右子樹 class solution 迭代方法 因為棧的出入會逆序,所以先遍歷當前節點,然後插入右子樹,然後插入左子樹 遞迴方法 先遍歷左子樹,然後當前節點,然後右子樹 class solution 迭代方法 先找到最左的節點,期間不斷將經過的節點壓入棧,出...
防範sql注入值得注意地方
sql注入是大家基本都清楚,一般來說用引數化就能解決注入的問題,也是最好的解決方式。有次技術群裡問到乙個問題,如下圖 很顯然tablename是外部傳遞過來的,暫時不考慮具體的業務環境,但如果以select from table 把錶名稱當引數肯定是不能執行的,如果是拼接sql會有注入的危險。那麼此...