物件導向高階一

2021-07-31 02:49:26 字數 4667 閱讀 6240

通過字串的形式操作物件相關的屬性

四個可以實現自省的函式:hasattr、getattr、setattr、delattr

class

people:

country = 'china'

def__init__

(self,name):

self.name = name

p = people('spring')

print(p.__dict__)

print(hasattr(p,'country'))

print(hasattr(p,'__doc__'))

print(hasattr(p,'name'))

print(hasattr(p,'__init__'))

print(hasattr(people,'country'))

res = getattr(p,'country')

print(res)

res = getattr(p, 'age', '沒有設定age')

print(res)

res = getattr(people, 'country')

print(res)

p.age = 18

print(p.age)

print(p.__dict__)

setattr(p, 'age', 28)

print(getattr(p, 'age'))

setattr(people,'country','usa')

print(getattr(people,'country'))

print(hasattr(p, 'age'))

delattr(p, 'age') #res = getattr(p, 'age', '沒有設定age') # 找不到可以設個返回值,不設定找不到會報錯。

print(hasattr(p, 'age'))

#不推薦這個

m = __import__('time')

print(m.time())

#推薦方法

import importlib

m = importlib.import_module('time')

print(m.time())

#module

class

ftpclient:

def__init__

(self, addr):

print('正在連線伺服器[%s]'%addr)

self.addr = addr

# def get(self):

# print('get')

from module import ftpclient

f1 = ftpclient('192.168.1.1')

if hasattr(f1, 'get'):

func_get = getattr(f1, 'get')

func_get()

else:

print('---->不存在此方法')

import sys

x = 22

class

foo:

pass

defs1

(): print('s1')

defs2

(): print('s2')

this_module = sys.modules[__name__]

print(this_module)

print(hasattr(this_module,'s1'))

print(this_module.s1)

#__setattr__, __delattr__, __getattr__

class

foo:

def__init__

(self,name):

self.name = name

def__setattr__

(self, key, value):

print('---setattr-----key: %s value: %s'%(key, value))

self.__dict__[key] = value

def__delattr__

(self, item):

print('------delattr-----item: %s'%item)

# self.__dict__.pop(item)

del self.__dict__[item]

def__getattr__

(self, item):

print('----getattr----item: %s'%item)

#setattr

cc = foo('spring')

print(cc.__dict__)

print(cc.name)

cc.__dict__['age'] = 166

print(cc.age)

#delattr

print(cc.__dict__)

del cc.age

print(cc.__dict__)

#getattr 屬性不存在才會執行 和getattr() 結合使用

print('!'*100)

print(cc.zz)

class

list

(list):

def(self, object: int):

ifnot isinstance(object,int):

raise typeerror('must be int')

definsert

(self, index: int, object: int):

ifnot isinstance(object, int):

raise typeerror('must be int')

super().insert(index, object)

cc = list([1,2,3])

print(cc)

print(cc)

cc.insert(0,22)

print(cc)

import time

class

open:

def__init__

(self, file_path, m='r', encode='utf-8'):

self.x = open(file_path, mode=m, encoding=encode)

self.file_path = file_path

self.encoding = encode

defwrite

(self, line):

print('寫入: ', line)

t = time.strftime('%y-%m-%d %x')

self.x.write('%s %s'%(t, line))

def__getattr__

(self, item):

return getattr(self.x, item)

f = open('a.txt', m='a+')

f.x.write('sss\n')

f.write('zzz\n')

f.seek(0)

print(f.read())

class

list:

def__str__

(self):

return str(self.cont)

def__init__

(self,cont):

self.cont = cont

def(self,value):

ifnot isinstance(value, str):

raise typeerror('must be str')

@property

defmid

(self):

if len(self.cont) == 1

or len(self.cont) == 0: #如果list為**著只有乙個元素返回list本身

return self.cont

a, b = divmod(len(self.cont), 2)

if b != 0:

return self.cont[a+1] #如果奇數返回中間數

else:

return self.cont[a:a+2] #如果是偶數返回中間的2個數

def__getattr__

(self, item):

#其餘方法都使用list自帶

return getattr(self.cont,item)

cc = list(['b','a','c','d'])

print(cc.mid)

cc.sort()

print(cc)

物件導向 高階

json方式的物件導向 json 把方法包在json裡 json物件導向 有人管他叫 命名空間 在公司裡 把同一類 的方法包在一起 拖拽和繼承 物件導向的拖拽 改寫原有的拖拽 繼承 asdf 拖拽 instanceof 檢視物件是某個類的例項 使用繼承 限制範圍的拖拽類 建構函式的偽裝 屬性的繼承 ...

物件導向高階

public class person public void print public class student extends person 重寫了父類方法 public void print public class demo public class demo 1.不能new這個類,只能靠...

物件導向高階

私有屬性,不能被子類繼承,在屬性的前面加上 就變為了私有屬性 私有方法,不能被子類繼承,在方法的前面加上 就變為了私有方法 只在前面加,後面不加,一般前後都有 的,屬於類當中自帶的方法或屬性 class class test1 str1 a 私有屬性 def init self pass def m...