#self实际是类的实例
class A:
def func(self):
print(self) #指向的是类的实例
print(self.__class__) #指向的是类
a = A()
a.func()
#<__main__.A object at 0x02C40F10> ,显然是A()
#<class '__main__.A'>
#a=A() a.func()过程等价于
A.func(a)
#类属性
class Footballer:
# 构造函数,创建对象时自动执行的方法,运行student = Footballer("马冬梅",18) 即会执行__init__
def __init__(self,name,age): #self==类的实例,即self==student
self.age=age #定义实例变量self.r
print("我叫:",name,"今年",age,"岁")
# 定义类变量(在类中但是不在方法中的变量)
name = 'test' #此时self对象才有了name属性(self.name)
# 定义类方法必须要加上self形参
def speak(self):
print('name:'+self.name)
print('age:'+str(self.age))
student = Footballer("马冬梅",18)
student.speak()
Output:
我叫: 马冬梅 今年 18 岁
name:test
age:18
#twoSum两数之和
#solution 1
class Solution:
def __init__(self, nums, target): #构造函数,创建对象即运行
self.n=nums
self.t=target
def twoSum(self):
num_dict = dict()
for index, value in enumerate(self.n):
sub = self.t - value
if sub in num_dict.keys():
return [num_dict[sub], index]
else:
num_dict[value] = index
return []
a=Solution([1,2,7,11],9) #要在创建对象时传参,那需要构造函数。这一步运行了实际sef.n,self.t已经执行了。
a.twoSum()
#solution 2
class Solution:
def twoSum(self, nums, target):
num_dict = dict()
for index, value in enumerate(nums):
sub = target - value
if sub in num_dict.keys():
return [num_dict[sub], index]
else:
num_dict[value] = index
return []
a=Solution() #创建对象不传参
a.twoSum([1,2,7,11],9) #对象调用方法再传参
#以上两行调用相当于:
Solution().twoSum([2,7,11,15],9)
#Solution 3 #python切片
class Solution:
def twoSum(self, nums, target):
for i in range(len(nums)):
if target-nums[i] in nums[i+1:]:
return[i,nums.index(target-nums[i])]
#solution 4 #通过列表值,去索引列表index
class Solution:
def twoSum(self, nums, target):
for index, value in enumerate(nums):
sub = target - value
if sub in nums:
return [index,nums.index(sub)]