首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

类设计:通过Property(Set var)vs Function vs Constructor参数传递值

类设计是指在面向对象编程中,根据需求和功能设计类的结构、属性和方法的过程。在类设计中,可以通过不同的方式传递值,包括通过Property(Set var)、Function和Constructor参数。

  1. Property(Set var):Property是类中的一个特殊方法,用于设置和获取类的属性值。通过Property的Set var方式,可以在类中定义一个属性,并通过设置属性的值来传递数据。在属性的Set方法中,可以对传入的值进行验证、处理或触发其他操作。这种方式适用于需要对传入的值进行处理或验证的情况。

例如,假设有一个Person类,其中有一个属性名为age,可以使用Property(Set var)方式传递值:

代码语言:python
代码运行次数:0
复制
class Person:
    def __init__(self):
        self._age = None

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative.")
        self._age = value

在上述代码中,通过age属性的setter方法来传递值,并在方法中对传入的值进行验证,确保年龄不为负数。

  1. Function:通过函数来传递值是一种常见的方式。在类设计中,可以定义一个接受参数的函数,并在调用该函数时传递相应的值。这种方式适用于需要在函数内部进行一系列操作或计算的情况。

例如,假设有一个Calculator类,其中有一个add方法用于计算两个数的和,可以使用Function方式传递值:

代码语言:python
代码运行次数:0
复制
class Calculator:
    def add(self, num1, num2):
        return num1 + num2

在上述代码中,通过add方法的参数num1和num2来传递值,并在方法内部进行相加操作。

  1. Constructor参数传递值:构造函数是在创建对象时自动调用的特殊方法,用于初始化对象的属性。通过构造函数的参数,可以在创建对象时传递相应的值。这种方式适用于在创建对象时就需要传递初始值的情况。

例如,假设有一个Car类,其中有一个属性名为color,可以使用Constructor参数传递值:

代码语言:python
代码运行次数:0
复制
class Car:
    def __init__(self, color):
        self.color = color

在上述代码中,通过Car类的构造函数的参数color来传递值,并将其赋值给color属性。

总结:

  • Property(Set var)方式适用于需要对传入的值进行处理或验证的情况。
  • Function方式适用于需要在函数内部进行一系列操作或计算的情况。
  • Constructor参数传递值方式适用于在创建对象时就需要传递初始值的情况。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

细数这些年被困扰过的 TS 问题

其实它没有什么特别,就像传递参数一样,我们传递了我们想要用于特定函数调用的类型。 ?...四、如何理解装饰器的作用 在 TypeScript 中装饰器分为装饰器、属性装饰器、方法装饰器和参数装饰器四大。装饰器的本质是一个函数,通过装饰器我们可以方便地定义与对象相关的元数据。...和 @Injectable() 最终会被转换成普通的方法调用,它们的调用结果最终会以数组的形式作为参数传递给 __decorate 函数,而在 __decorate 函数内部会以 Device 作为参数调用各自的类型装饰器...; 通过观察以上结果,我们知道数值枚举除了支持 从成员名称到成员 的普通映射之外,它还支持 从成员到成员名称 的反向映射。..._name; class Person { constructor(name) { _name.set(this, void 0); __classPrivateFieldSet

15.1K73

一文读懂 TS 中 Object, object, {} 类型之间的区别

我们可以看到,如果我们创建一个返回其参数的函数: 传入一个 Object 对象的实例,它总是会满足该函数的返回类型 —— 即要求返回包含一个 toString() 方法。...2.2 Object vs object 有趣的是,类型 Object 包括原始function func1(x: Object) { } func1('semlinker'); // OK 为什么...Object.prototype 的属性也可以通过原始访问: > 'semlinker'.hasOwnProperty === Object.prototype.hasOwnProperty true...相反,object 类型不包括原始function func2(x: object) { } // Argument of type '"semlinker"' // is not assignable...) name: string namedPoint.name // Ok 三、对象字面量类型 vs 接口类型 我们除了可以通过 Object 和 object 类型来描述对象之外,也可以通过对象的属性来描述对象

16.4K21
  • React如何处理事件

    React事件处理VS原生Dom事件处理 两者在事件处理方面极其类似,只是在一些语法上稍有不同: React 事件绑定属性的命名采用驼峰式写法(如:onClick,onKeyUp),而不全是小写字母。...("#wrap") ); 以上示例在点击链接时,会报错:Uncaught TypeError: Cannot read property 'setState' of undefined。...向事件处理函数传递参数 现在咱们要将之前为年龄加1的案例进行一下调整!调整为当点击时根据传递参数来决定加几!比如传2,点击一次加2。...传递参数有两种方法: 1、通过箭头函数 其实也就是在箭头函数内,调用事件处理函数。...("#wrap") ); 2、通过bind 通过 bind 方式向监听函数传参,在组件中定义的监听函数,事件对象 e 要排在所传递参数的后面 class MyComponent extends React.Component

    86720

    一文读懂@Decorator装饰器——理解VS Code源码的基础(下)

    类型声明: // 装饰器function classDecorator(target: any) { return // ...}; @参数:只接受一个参数 target: 的构造器 @...返回:如果类装饰器返回了一个,她将会被用来代替原有的构造器的声明 因此,装饰器适合用于继承一个现有并添加一些属性和方法。...) { // 装饰器 const original = descriptor.set; descriptor.set = function (value) { const newObj...静态方法参数") foo) {} constructor(@f("7. 构造器参数") foo) {} @f("2. 实例方法") method(@f("1....(AOP 面向切面编程的设计理念) 装饰和被装饰可以独立发展,不会相互耦合。 装饰模式是Class继承的一个替代模式,可以理解成组合。

    77730

    js程序设计03——面向对象

    而访问器属性不包含数据,包含一堆get、set方法(非必须),读取访问对象属性时,采用getter、setter分别实现。...注意:这里的属性下划线是一种记号,表示只能通过对象方法访问的属性,这样一来,对该属性的读取会使用get、set来实现,如果只指定get表示不能写入,只指定set表示不能读取。...); 关于对象创建(设计模式) 1、工厂模式 function createPerson(name,age){ var o = new Object(); o.name = name; o.age...原型设计中的关系如下图(摘自:“javascript高级程序设计”): ?...借用构造函数向超传递参数function SuperType(name){ this.name = name; } function SubType(){ //继承了SuperType,同时还传递参数

    1.1K00

    从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置

    简单的情况下,ORM可以把数据库中的表和Model对象一一映射起来;也有比较复杂的情况,ORM允许使用OO(面向对象)功能来做映射,例如:Person作为基,Employee作为Person的派生,...Dto是与外界打交道的Model,entity则不一样,有一些Dto的计算属性我们并不像保存在数据库中,所以entity中没有这些属性;而数据从entity传递到Dto后某些属性也会和数据库里面的形式不一样...带有一个DbContextOptions参数,那我们就在MyContext种建立一个Constructor,并overload这个带有参数Constructor。...也可以通过VS的Sql Server Object Explorer查看: ?...重启VS,并运行: ? 种子数据进去了! 先写到这吧!!!!

    2.2K70

    EF 数据库连接约定(Connection String Conventions in Code First)

    一个典型的EF应用大多数情况下是一个DbContext的派生(derived class)来控制,通常可以使用该派生调用DbContext的构造函数,来控制以下的东西: (1)、上下文如何连接到数据库...(给定连接字符串) (2)、上下文是通过Code First语法计算模型还是使用EF 设计器 (3)、额外的高级选项 下面是DbContext构造器的常用的用途: 一、DbContext无参构造函数 如果当前...注:VS2010默认安装SQL Express,VS2012默认安装LocalDb,在安装过程中,EF NuGet包会检查哪个数据库服务(前面介绍的)可用,当EF创建默认连接的时候,当EF创建默认链接的时候...(2)、如果连接字符串的name属性和上下文类名不一样,但是还是希望上下文使用配置文件的数据库连接进行数据库连接,这时就需要在上下文构造函数中调用DbContext的带string参数的构造函数,并传入连接字符串的...另外一种方式是传递给DbContext构造函数配置文件中的connectionString节点的name属性来指定上下文通过配置文件中connectionString来连接字符串,代码如下: public

    1.4K90

    【翻译】ECMAScript装饰器的简单指南

    property descriptor也有get和set中间件函数来返回或更新的键,但这些是可选的。...descriptor上不能有初始键,因为getter会返回该属性的。 您也不能在descriptor上使用writable属性,因为您的写入是通过setter完成的,您可以在那里阻止写入。...第一个参数是属性被添加/修改的目标对象,第二个参数是属性名作为key,property descriptor的对象。 该函数返回第一个目标对象。...由于实例字段既不是的一部分也不是它的原型,因此操作它的descriptor并不简单。 Babel给我们的是实例字段的property descriptor上的初始化函数,而不是键。...所以当我们调用new User时,User函数是通过我们传递参数来调用的,结果我们得到了一个对象。 因此,User是一个构造函数。

    69210

    一文读懂 @Decorator 装饰器——理解 VS Code 源码的基础

    而 Decorator 装饰器在 VS Code 的控制反转设计模式里,其主要作用是实现 DI 依赖注入的功能和精简部分重复的写法。...3.3 @Decorator (装饰器语法) 是一种便捷的语法糖(写法),通过 @ 来引用,需要编译后才能运行。理解了概念之后可以知道:装饰器的存在就是希望实现装饰器模式的设计理念。... __decorate = function (decorators, target, key, desc) {     var c = arguments.length;     // Step1 备份原来构造器...(target: any) {   return // ... }; @参数:只接受一个参数 target: 的构造器 @返回:如果类装饰器返回了一个,她将会被用来代替原有的构造器的声明 因此,装饰器适合用于继承一个现有并添加一些属性和方法...静态方法参数") foo) {}   constructor(@f("7. 构造器参数") foo) {}   @f("2. 实例方法")   method(@f("1.

    1.1K21

    Babel下的ES6兼容性与规范

    ES6新特性在Babel下的兼容性列表 ES6特性 兼容性 箭头函数 支持 的声明和继承 部分支持,IE8不支持 增强的对象字面量 支持 字符串模板 支持 解构 支持,但注意使用方式 参数默认,不定参数...转换后 //的定义 'use strict'; var _get = function get(_x, _x2, _x3) { var _again = true; _function: while...转换后 //通过对象字面量创建对象 'use strict'; var human = { breathe: function breathe() { console.log(...1.6 参数默认,不定参数,拓展参数 参数默认 function sayHello(age, name='dude'){ console.log(`Hello ${name}`); } sayHello...,我们需要使用函数的apply方法 sayHello.apply(null, people); //输出:Hello Wayou,John,Sherlock 参数默认,不定参数,拓展参数都可以完全使用

    2K00

    Babel下的ES6兼容性与规范

    ES6新特性在Babel下的兼容性列表 ES6特性 兼容性 箭头函数 支持 的声明和继承 部分支持,IE8不支持 增强的对象字面量 支持 字符串模板 支持 解构 支持,但注意使用方式 参数默认,不定参数...转换后 //的定义 'use strict'; var _get = function get(_x, _x2, _x3) { var _again = true; _function: while...转换后 //通过对象字面量创建对象 'use strict'; var human = { breathe: function breathe() { console.log(...1.6 参数默认,不定参数,拓展参数 参数默认 function sayHello(age, name='dude'){ console.log(`Hello ${name}`); } sayHello...,我们需要使用函数的apply方法 sayHello.apply(null, people); //输出:Hello Wayou,John,Sherlock 参数默认,不定参数,拓展参数都可以完全使用

    97810

    JS_手写实现

    result : context; function _new( /* 构造函数 */ constructor, /* 构造函数参数 */ ...params ) {...SuperClass() 「缺点」 父中引用类型的属性,被「子类实例」公用 创建父的时候,无法向父传递参数 构造函数继承(借助 call) 创建即继承 function SubClass(params...function createObject(obj){ //通过原型式继承创建新对象 var o =Object.create(obj); //拓展新对象 o.name = `北宸南蓁...ES6通过class关键字定义,里面有构造方法,之间通过extends关键字实现继承。子类必须在constructor方法中调用super方法,否则新建实例报错。...如果你想柯里化一个接受可变参数数的函数(一个变量函数,例如Math.min()),你可以选择将参数传递给第二个参数arity。

    1.3K20

    面向对象的程序设计

    下述内容主要讲述了《JavaScript高级程序设计(第3版)》第6章关于“面向对象的程序设计”。 ECMA-262把对象定义为:”无序属性的集合,其属性可以包含基本、对象或者函数。”...可枚举 能否通过for-in循环返回属性 [[Get]] 属性被读取时调用的函数 默认undefined [[Set]] 属性被写入时调用的函数 默认undefined 修改属性默认的特性:Object.defineProperty...function Super(){ this.property = true; } Super.prototype.getSuperValue = function(){ return...问题:(1)包含引用类型的原型,会被所有实例共享;(2)创建子类型的实例时,不能向父类型的构造函数中传递参数。 2. 借用构造函数 在子类构造函数的内部调用父的构造函数。...// 继承Super,可传递参数 Super.call(this, name); this.age = age; } var instance = new Sub("Gavin", 26

    41941
    领券