python方法中的self
2024-10-30 09:01:41
前几天在写一个c作业时,突发奇想,在结构体中加入函数指针,
像这样:
struct People {
int _age;
int (*age)();
}people;
这样调用时就可以 people.age()
这是可行的,因为在c中, foo() 和 (&foo)() 是一样的,
也就是说 people.age() 和 (*(people.age))() 是一样的。
若要求有多个People对象,就要把结构体当做参数:
struct People {
int _age;
void (*init)(struct People *);
int (*age)(struct People *);
};
int People_age(struct People *p) {
return p->_age;
}
void People_init(struct People *p, int age) {
p->_age = age;
p->age = &People_age;
}
使用时,
struct People people;
people.init = &People_init;
people.init(people, 20);
age = people.age(people);
仔细想来,这种在方法中传递对象自身的方式,神似python。
class cls:
def __init__(self, age):
self._age = age
def age(self):
return self._age c = cls(20);
age = c.age()
python把age函数绑定到对像cls的实例c上,调用时默认把c作为self传入age
这可以在ipython中看出:
In [6]: cls.age
Out[6]: <unbound method cls.age> In [7]: c = cls(20) In [8]: c.age
Out[8]: <bound method cls.age of <__main__.cls instance at 0x7f49df7da710>>
最新文章
- php跳转页面
- jquery文件上传控件 Uploadify
- shadow Dom(shadowRoot) 访问
- BZOJ 1629: [Usaco2007 Demo]Cow Acrobats
- cf443B Kolya and Tandem Repeat
- dage手法之 头部和banner ad tpl_header
- find命令之(-atime,-ctime,-mtime)
- 在网页中使用particlesjs实现背景的动态粒子特效
- Neo4j 第一篇:在Windows环境中安装Neo4j
- M - 约会安排 HDU - 4553 线段树 (最长连续段)
- shell md5sum
- 第四章 javascript的语句、对象笔记摘要
- pycharm2018破解
- [UE4]C++ getter and setter
- 【Win10】一些零碎不好归档的小总结(原谅我这个该死的标题吧)
- 【翻译】HTML5开发——轻量级Web Database存储库html5sql.js
- 【sdut2878】Circle
- Samba共享权限分配
- Java Override和@Override
- 利用git reflog找回错误的重置
热门文章
- 定义类型uint8_t,uint32_t
- mybatis Oracle 批量插入,批量更新
- ecshop不同样式文章页调用不同文章模板
- js中子页面父页面方法 变量相互调用
- 搭建Nginx+Java环境测试并且运行
- ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)
- JavaScript 中的尾调用
- while 与do ..while区别
- tp框架之留言板练习
- CSS 代码技巧与维护 ★ Mozilla Hacks – the Web developer blog