面向对象中类的成员
Posted 粗哥记事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象中类的成员相关的知识,希望对你有一定的参考价值。
字段:
静态字段
普通字段
PS:静态字段代码加载时候,已经创建
方法
所有的方法属于类
1、普通方法:至少一个self,对象执行
2、静态方法:任意参数, 类执行(对象执行)
3、类方法 :至少一个cls, 类执行(对象执行)
属性
不论不类的东西
具有方法的写作形式,具有字段访问形式
def func(arg):
print(arg)
func(1)
func("alex")
func([11,22,33])
C#/Java
def func(int arg):#指定类型
print(arg)
func(123)
func("alex") #报错
如何实现?
class A:
pass
class B(A):
pass
class C(A):
pass
#arg参数,必须是A类型或A的子类型
def func(A arg):
print(arg)
obj = B()
obj = C()
obj = A()
func(obj)
字段
class Foo:
CC = 123 #静态字段
def __init__(self):
self.name = ‘alex‘ #普通字段
def show(self):
print(self.name)
字段:
一般情况下,自己访问自己的字段
规则:
普通字段只能用对象访问
静态字段用类访问(万不得已的时候才可以使用对象访问)
方法:
普通方法 至少一个self, 对象执行
静态方法 任意参数, 类执行 (对象执行)
类方法 至少一个cls 类执行 (对象执行)
@staticmethod
def f1(a1,a2):
print(a1,a2)
def f2(cls):
print(cls) #cls类名,()创建对象
obj = Province(‘beijing‘)
obj.show
属性
class Pager:
def __init__(self, all_count):
self.all_count = all_count
@property #属性的获取
def all_pager(self):
a1, a2 = divmod(self.all_count, 10)
if a2 == 0:
return a1
else:
return a1 +1
@all_pager.setter
def all_pager(self, value):
print(value)
@all_pager.deleter:
print(‘del all_pager‘)
p = Pager(101)
#p.all_count#字段
print(p.all_count)
p.all_count = 102
del p.all_count
ret = p.all_pager
print(ret)
p.all_pager = 111
del p.all_pager
属性2
class Pager:
def __init__(self, all_count):
self.all_count = all_count
def f1(self):
pass
def f2(self):
pass
def f3(self):
pass
foo = property(fget=f1,fset=f2,fdel=f3)
p = Pager(101)
result = p.foo
print(result)
p.foo = ‘alex‘
del p.foo
成员修饰符
私有:
只能类自己本身成员内部访问
公有
pass
class Foo:
#构造方法
def __init__(self, name, age)
self.name = name
self.age = age
#析构方法
def __del__(self):
pass
def __call__(self):
print(‘call‘)
def __str__(self):
return "%s - %s" %(self.name, self.age)
obj = Foo()
obj()#对象() 执行call方法
#Foo()()
obj1 = Foo(‘alex‘,77)
ret = str(obj1) #str 方法
print(ret)
#__dict__获取对象中封装的数据
ret = obj1.__dict__
print(ret)
def __getitem__(self, item):
#item.start,item.stop,item.step
return 123
def __setitem__(self, key, value):
print(‘setitem‘)
def __delitem__(self, key):
print(‘del item‘)
dic = {"k1":123} #dic = dict(k1=123)
dic[‘k1‘] #dic()
dic[‘k1‘] = 123
del dic[‘k1‘]
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Alex Li
class Foo:
# 构造方法
def __init__(self, name,age):
self.name = name
self.age = age
# 析构方法
def __del__(self):
pass
def __call__(self):
print(‘call‘)
def __str__(self):
return "%s - %d" %(self.name, self.age)
def __add__(self, other):
temp = "%s - %d" %(self.name,other.age)
return temp
def __getitem__(self, item):
# print(type(item),item)
# item.start item.stop item.step
print(type(item))
return 123
def __setitem__(self, key, value):
# key.start key.stop key.step
print(type(key),type(value))
def __delitem__(self, key):
# key.start key.stop key.step
print(type(key))
obj = Foo(‘alex‘, 73)
# obj() # call
# 语法对应关系
# ret1 = obj[‘ad‘]
ret2 = obj[1:4:2]
obj[1:4] = [11,22,33,44,66]
del obj[1:4]
# print(ret)
# obj[‘k1‘] = 111
# del obj[‘k1‘]
# dic = {‘k1‘: 123} # dic = dict(k1=123)
# dic[‘k1‘] # dic()
# dic[‘k1‘] = 123
# del dic[‘k1‘]
obj = Foo()
obj() # 对象() 执行call
# Foo()()
obj1 = Foo(‘alex‘, 73)
obj2 = Foo(‘eric‘, 84)
# 获取对象中封装的数据
ret = obj1.__dict__
print(ret)
# print(Foo.__dict__)
# print(obj1)
# print(obj2)
# ret = str(obj1)
# print(ret)
# ret = obj1 + obj2
# print(ret)
# __dict__
class C1:
def f1(self):
print(‘c1,f1‘)
return 123
class C2(C1):
def f1(self):
# 主动执行父类f1方法
ret = super(C2, self).f1()
print(‘c2.f1‘)
return ret
# C1.f1(self)
obj = C2()
obj.f1()
#有序字典
class MyDict(dict):
def __init__(self):
self.li = []
super(MyDict, self).__init__()
def __setattr__(self, key, value):
self.li.append(key)
super(MyDict, self).__setattr__()
def __str__(self):
temp_list = []
for key in self.li:
value = self.get(key)
temp_list.append("‘%s‘:%s‘" %(key,value,))
temp_str = "{" + ",".join(temp_list) + "}"
return temp_str
obj = MyDict()
obj[‘k1‘] = 123
obj[‘k2‘] = 456
print(obj)
"""
class Foo:
instance = None
def __init__(self,name):
self.name = name
@classmethod
def get_instance(cls):
#cls类名
if cls.instance:
return cls.instance
else:
obj = cls(‘alex‘)
cls.instance = obj
return obj
obj1 = Foo.get_instance()
print(obj1)
obj2 = Foo.get_instance()
print(obj2)
以上是关于面向对象中类的成员的主要内容,如果未能解决你的问题,请参考以下文章