在我的React应用程序中,我正在使用REST API。我有多个返回特定对象的端点,例如一个人:
from functools import partial
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.tabbedpanel import TabbedPanel
from kivy.uix.tabbedpanel import TabbedPanelItem
import multiprocessing
def worker():
print('calculator')
x=2
while True:
x*x
class MyApp(App):
# layout
def build(self):
layout = BoxLayout(orientation='vertical')
tab=TabbedPanel(do_default_tab=False)
self.tabitem1=TabbedPanelItem(text='tab1')
self.tabitem2=TabbedPanelItem(text='tab1')
self.tabitem3=TabbedPanelItem(text='tab1')
tab.add_widget(self.tabitem1)
tab.add_widget(self.tabitem2)
tab.add_widget(self.tabitem3)
layout.add_widget(tab)
#load tab in other core cpu ?
#self.tab1()
p = multiprocessing.Process(target=self.tab1())
p.start()
p2 = multiprocessing.Process(target=worker())
p2.start()
return layout
def tab1(self):
layout1 = BoxLayout(orientation='vertical')
btn = Button(text='btn1', font_size=24)
btn.bind(on_press=partial(self.click_button))
layout1.add_widget(btn)
btn2 = Button(text='btn2', font_size=24)
btn2.bind(on_press=partial(self.click_button))
layout1.add_widget(btn2)
self.tabitem1.add_widget(layout1)
def click_button(self, btn):
print(btn.text)
if __name__ == "__main__":
MyApp().run()
:返回人员列表/api/persons
:返回特定人员/api/persons/:id
:返回汽车/api/cars/:id
财产中的某人在每种情况下,我都有一个代表一个人的对象,我现在发现需要为这些对象添加功能,例如我想添加一个owner
函数来汇总名字和姓氏以及ID
以良好的OOP方式,我不想在任何需要显示名称的地方重复该代码。相反,我想将该函数添加到返回的对象。
是否有可接受的默认方式?就像让它知道要反序列化的类一样?或者我应该在获取数据后手动转换数据?
答案 0 :(得分:2)
此原型方法可用于任何具有“firstName”和“lastName”属性的对象:
Object.prototype.displayName = function() {
if(this.firstName && this.lastName)
{
return this.firstName + " " + this.lastName
}
return ""
}
用法:
var person = {
firstName: "John",
lastName: "Doe"
}
person.displayName() // "John Doe"
显然,如果您将Person
定义为一个类,您也可以使用Person.prototype.displayName
扩展它,而不是创建Object
的原型。
答案 1 :(得分:1)
我将使用构造函数创建一个class Person
,该构造函数接受从API接收的POJO(普通旧JavaScript对象)类型的参数并声明类方法。然后在HTTP响应处理程序上,您应该将对象映射到Person
类的实例。
// declare the class
class Person {
constructor(person) {
this.name = person.name;
this.age = person.age;
}
displayName() {
return this.name;
}
}
// convert the plain objects to instances of the Person class
const people = apiResponse.people.map(person => new Person(person));
答案 2 :(得分:1)
您可以简单地将一个具有必要原型的新对象分配给API调用中的接收对象。
var apiData = [{_id: 317, name: "John", lastname: "Doe"},
{_id: 562, name: "Fred", lastname: "Lee"}],
proto = {displayName: function(){
var dn = `${this.name} ${this.lastname} ${this._id}`;
console.log(dn);
return dn;
}},
data = apiData.map(d => Object.assign(Object.create(proto),d));
data.forEach(d => d.displayName());